在Ruby中使用局部常量

时间:2012-04-02 07:06:37

标签: 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.inspect
   end
   => SyntaxError: (irb):11: dynamic constant assignment

1 个答案:

答案 0 :(得分:-1)

问题是在方法的情况下,你实际上会在每次调用方法时改变常量。您只能初始化一种常量。这也适用于块。看到这里:

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

证明你不能重新分配常量,即使是在块中。