Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中使用局部常量_Ruby - Fatal编程技术网

在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

除了约定之外,在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.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编码是错误的,可能是重复的