在方法体内不允许赋值给常量。
我理解前提并尝试两种代码变体:
PERSONS = {}
def create_persons(filename)
File.foreach(filename).with_index do |line, number|
array = line.split(' ').unshift(number+1)
hash = {:id => array[0],:first_name => array[1], :last_name => array[2], :email => array[3]}
PERSONS = hash
end
end
我收到错误:
santa.rb:13: dynamic constant assignment
PERSONS = hash
^
我尝试第二个版本,而不是使用相等的运算符赋值,我将一个空数组初始化为常量,并使用append运算符将哈希值附加到空数组。这有效!
PERSONS = []
def create_persons(filename)
File.foreach(filename).with_index do |line, number|
array = line.split(' ').unshift(number+1)
hash = {:id => array[0],:first_name => array[1], :last_name => array[2], :email => array[3]}
PERSONS << hash
end
end
我的问题是为什么第二个版本在我使用&lt;&lt;赋值运算符,但不适用于=赋值运算符。
答案 0 :(得分:1)
Ruby中常量的奇怪之处在于你可以定义它们一次,但除非它们被冻结,否则无休止地修改它们。第一个是问题,因为您正在切换哪个对象PERSONS
引用。在第二种情况下,您要向现有对象添加内容,这是允许的。
从技术上讲,重新定义常数是可能的,但最好避免这种情况。