ARGV в Ruby: значение константы

Я новичок в Ruby, поэтому, пожалуйста, принимайте мои вопросы, если они могут быть бессмысленными. Мой вопрос,

Константа — это место, где мы присваиваем значения, которые не должны изменяться. Почему ARGV является константой, когда мы можем передать в нее столько аргументов, сколько захотим? Разве аргументы не являются значениями для ARGV? Когда мы передаем аргументы в ARGV, присваиваем ли мы значения или у ARGV уже есть свои собственные наборы значений?


person NikitaShrestha    schedule 03.11.2014    source источник


Ответы (3)


В какой-то момент константе должно быть присвоено новое значение. Если вы примете значение константы как нечто, чему никогда не присваивается новое значение, тогда константы вообще не будет. Таким образом, константа является относительным понятием; вы не можете определить, что такое константа без соответствующего домена/области. Константа остается неизменной в пределах этого домена, но ее значение назначается/меняется вне области действия.

В математике предположим, что какой-то математик использовал константу A = 3 в какой-то момент своей жизни, решая определенную задачу. Это не означает, что с этого момента каждый, кто использует константу A, всегда должен предполагать, что ее значение равно 3. В математике областью константы может быть отдельное доказательство, статья, книга или соглашение во всем подполе и т. д.

Для компьютерной программы областью константы обычно является время выполнения программы. Константа остается неизменной относительно выполнения программы. ARGV имеет свои значения, установленные до выполнения программы Ruby.

person sawa    schedule 03.11.2014
comment
Большое спасибо за ваш ответ! Теперь я понимаю концепцию немного яснее! - person NikitaShrestha; 03.11.2014

Дело в том, что ARGV имеет постоянное значение на протяжении всего времени работы вашей программы. Другая причина заключается в том, что вы не должны изменять значение ARGV. Со страницы Википедии под названием Constant (компьютерное программирование):

[…] константа — это идентификатор, ассоциированное значение которого обычно не может быть изменено программой во время ее выполнения […]

Ruby немного особенный, потому что он позволяет вам переназначать ARGV (как и любую другую константу), хотя и выдает предупреждение. Ниже приведен допустимый код Ruby (но не делайте этого):

ARGV = [123]
# warning: already initialized constant ARGV

p ARGV
# [123]
person Patrick Oscity    schedule 03.11.2014
comment
Спасибо за помощь! Теперь я понимаю это немного лучше. - person NikitaShrestha; 03.11.2014

ARGV — это постоянный массив, который определяется при инициализации скрипта Ruby, в котором значения в этом массиве устанавливаются на аргументы, которые были переданы самому скрипту.

Из документации ARGF:

ARGF — это поток, предназначенный для использования в сценариях, которые обрабатывают файлы, заданные в качестве аргументов командной строки или переданные через STDIN.

Аргументы, переданные вашему сценарию, хранятся в массиве ARGV, по одному аргументу на элемент. ARGF предполагает, что все аргументы, не являющиеся именами файлов, были удалены из ARGV.

Дополнительные сведения см. в документации по ARGV. .

person CDub    schedule 03.11.2014
comment
Благодарю вас! Документация помогает! - person NikitaShrestha; 03.11.2014