在Ruby中使用局部常量
除了约定之外,在ruby块或方法中使用或不使用局部常量还有什么理由吗 例如:在Ruby中使用局部常量,ruby,Ruby,除了约定之外,在ruby块或方法中使用或不使用局部常量还有什么理由吗 例如: get '/documents/:id' do Doc_id = params[:id] ... ... end 对 get '/documents/:id' do doc_id = params[:id] ... ... end 在一个块内,它似乎起作用,但在一个方法中,您会得到一个错误: def foo(bar) Foo = bar puts Foo.ins
get '/documents/:id' do
Doc_id = params[:id]
...
...
end
对
get '/documents/:id' do
doc_id = params[:id]
...
...
end
在一个块内,它似乎起作用,但在一个方法中,您会得到一个错误:
def foo(bar)
Foo = bar
puts Foo.inspect
end
=> SyntaxError: (irb):11: dynamic constant assignment
问题是,在方法的情况下,您实际上会在每次调用该方法时更改常量。您只能初始化此类常量一次。这也适用于块。请看这里:
m = [1, 2]
m.each do |t|
DOC_id = 123
DOC_id = 12
end
然后您将得到以下错误:
(irb):12: warning: already initialized constant DOC_id
(irb):11: warning: already initialized constant DOC_id
(irb):12: warning: already initialized constant DOC_id
证明即使在块中也不能重新分配常数。一条警告显示可以重新分配常数,但Matz在他的一本书中说,用Ruby编码是错误的,可能是重复的