Какая переменная ARGV в рубине? - PullRequest
3 голосов
/ 23 октября 2010

Из того, что я прочитал, ARGV должна быть константой, так как она все в верхнем регистре, но я смог написать быструю программу, которая без ошибок изменила одно из значений в ARGV.Так какой тип переменной ARGV?

p ARGV
ARGV[0] = "Not the orginal"
p ARGV

Ответы [ 2 ]

7 голосов
/ 23 октября 2010

ARGV - это массив. Имейте в виду, что «константа» просто означает, что переменная не должна быть переназначена, а не то, что сам объект не может измениться. Возможно, вы путаете это с идеей объекта const в C ++. Это больше эквивалентно замороженному объекту в Ruby. (И обратите внимание, что даже «константы не должны быть переназначены» - слабая гарантия в Ruby. Переназначение константы не дает сбоя; просто выводится предупреждение. Это плохая практика.)

Чтобы проиллюстрировать разницу:

ruby-1.9.2-p0 > CONSTANT = [1,2,3]
 => [1, 2, 3] 
ruby-1.9.2-p0 > frozen = [1,2,3].freeze
 => [1, 2, 3] 
ruby-1.9.2-p0 > CONSTANT << 4
 => [1, 2, 3, 4] 
ruby-1.9.2-p0 > frozen << 4
RuntimeError: can't modify frozen array
6 голосов
/ 23 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...