В этом случае глобальная переменная x была объявлена в двух разных файлах, но вы хотите использовать обе переменные в своей программе, не затрагивая исходные файлы. Используя
Euphoria подталкивает вас к сужению сцены имён. Если бы все имена были автоматически глобальными для всей программы, у вас была бы масса конфликтов имён, особенно в программах, состоящих из файлов, написанных многими разными авторами. Конфликт имён должен вызывать сообщение об ошибке от компилятора, иначе он мог бы вести к очень скрытной ошибке, когда различные части программы встречно и случайно модифицируют одну и ту же переменную, не догадываясь об этом и никак не сигнализируя программисту о творящихся тайных безобразиях. Старайтесь использовать наиболее ограниченную сцену из всех, которые вы можете задать. Делайте переменные частными (только для подпрограммы) везде, где это возможно, а если это невозможно, делайте их местными (только для текущего файла), а не глобальными для целой программы.
Когда интерпретатор Euphoria ищет объявление имени, он в первую очередь проверяет текущую подпрограмму, затем текущий файл, а затем глобальные имена из включенных файлов. Имена, которые "более локальны", скажем так, будут
Объявления констант должны быть вне тела любых подпрограмм. Константы могут быть глобальными или местными (локальными), но не частными.
Объявления частных переменных внутри тела подпрограммы должны записываться в самом начале, сразу после закрывающей скобки списка аргументов, перед любыми другими исполняемыми командами подпрограммы.
Объявления местных имён на уровне файла, вне тела любых подпрограмм, не должны находиться внутри тела команд циклов (for, while) или тела команды ветвления (if).
Управляющая переменная, используемая в команде цикла for, является особым случаем. Она автоматически объявляется перед началом циклических расчётов, и её сцена ограничена телом команды циклa. Если команда цикла расположена внутри тела подпрограммы, переменная цикла является частной переменной и должна иметь имя, отличающееся от всех других объявленных частных переменных данной подпрограммы (к которым относятся и переменные, объявляемые в списке аргументов). Когда команда цикла находится на уровне файла, вне тела любых подпрограмм, переменная цикла является местной (локальной) переменной и должна иметь имя, отличающееся от всех других уже объявленных местных переменных данного файла. Но вы можете использовать одно и то же имя переменной цикла для различных циклов, если циклы не являются вложенными один в другой. Вам не нужно объявлять тип переменной цикла так, как это делается с другими переменными. Диапазон значений переменной цикла, задаваемый в команде цикла, определяет и все её законные значения, следовательно, любое добавочное задание её типа было бы излишним и поэтому не предусмотрено.
2.4.3 Задание типа переменной
Мы уже видели несколько примеров, касающихся типов переменных, но теперь мы дадим типам более развёрнутое и точное определение.
Объявления переменных как таковые записываются в виде имени типа, сопровождаемого списком имён переменных данного типа, которые мы решили объявить как подлежащие дальнейшему использованию в программе. Например,
object a
global integer x, y, z
procedure fred(sequence q, sequence r)