Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

переменные в unit

тут можно задать вопрос по скриптингу
Post Reply
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

переменные в unit

Post by nepopus »

Чтото я совсем запутался.
Разбираюсь потихоньку с юнитами и столкнулся с таким вопросом:

Можно ли из юнита(или основного скрипта) передавать в другой юнит переменные из заголовка(не используя передачу в параметрах процедур)? Если нет, то почему при дублировании в двух юнитах, он видит, что они дублированы и дает ошибку.

Еще постоянно путался с положениями процедур, но потом понял, что юниты нужно загружать в порядке зависимости процедур, чтобы все необходимое для работы уже было подгружено.

П.С. даже придумал задачу:
Как задать переменные в двух юнитах, чтобы они заработали, если в них обоих основная процедура с одной и той же переменной -

Code: Select all

begin
  addtosystemjournal(perem);
end.
<( o_O<) <( O_O )> (>O_o )>
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: переменные в unit

Post by Vizit0r »

примеры в студию.
на словах я ничего не понял
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Re: переменные в unit

Post by nepopus »

Vizit0r wrote:примеры в студию.
на словах я ничего не понял
Переформулирую:
Как перенести переменную из основного скрипта в основную процедуру юнита?
<( o_O<) <( O_O )> (>O_o )>
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: переменные в unit

Post by Vizit0r »

никак. юниты компилируются ПЕРЕД основным скриптом.
как вариант, можно переменные из основного скрипта перенести в юнит, и они станут доступны везде.
но это лишь предположение, надо проверять.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Re: переменные в unit

Post by nepopus »

Vizit0r wrote:никак. юниты компилируются ПЕРЕД основным скриптом.
как вариант, можно переменные из основного скрипта перенести в юнит, и они станут доступны везде.
но это лишь предположение, надо проверять.
Выдает ошибку о дублировании, если вставить в оба и выдает ошибку об отсутствующей переменной, если поместить ее в любом из скриптов :\
<( o_O<) <( O_O )> (>O_o )>
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: переменные в unit

Post by Vizit0r »

завтра гляну, что там за магия в компиляторе ПС происходит при использовании юнитов.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Re: переменные в unit

Post by nepopus »

вопрос актуален = ) Извиняюсь за настырность, но хочется знать как переносить переменные в основную процедуру юнита.
<( o_O<) <( O_O )> (>O_o )>
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: переменные в unit

Post by Vizit0r »

проблемы не увидел совсем.
юнит

Code: Select all

unit Unit1;
 
interface
var fg : String;
 
function MergeStrings(S1: string; S2: string): string;
implementation

function MergeStrings(S1: string; S2: string): string;
begin
fg := fg+'ddd';
Result := S1 + ' ' + S2 + fg;
end;

end.
скрипт

Code: Select all

Program New;
uses unit1; 
var bbb : String;
begin
fg := 'xxx';
bbb := MergeStrings('a','g');
fg := 'sdd';
end.
на отладке отлично видно, что после строки

Code: Select all

bbb := MergeStrings('a','g'); 
в fg находится 'xxxddd'.
так что видны в обе стороны.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Re: переменные в unit

Post by nepopus »

все, понял. В теме о unit написано, что можно опустить interface часть, а там, как я только что прочел, "содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны быть доступны основной программе и (или) другим модулям Паскаля". Спасибо.
<( o_O<) <( O_O )> (>O_o )>
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: переменные в unit

Post by Vizit0r »

ну как бы скрипт - это и есть основной юнит. так что фраза про доступность "другим юнитам" как раз про это :)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply