2012-04-02 5 views
0

慣例以外では、ルビブロックやメソッドでローカル定数を使用するかどうかは何か理由はありますか?例えば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 
+0

[動的定数割り当て](http://stackoverflow.com/questions/6712298/dynamic-constant-assignment) –

答えて

0

事がということですメソッドの場合、実際にはメソッドの呼び出しごとに定数を変更します。あなたはその種の定数を一度だけ初期化することができます。これはブロックについてもカウントされます。ここを参照してください:

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 

は、あなたもブロックで、定数を再割り当てすることができないことを証明します。

+0

の重複が可能であることを示す警告が表示されます。再割り当てすることができますが、書籍の1つであるMatz Rubyでコーディングする方法 – bjhaid

関連する問題