2011-10-26 16 views
2

私はルビーに新たなんだ内に存在するかどうかを確認する方法について説明します。次のような方法がありますか? (それが定義されていない場合)ルビー:変数はハッシュ定義

hash = { 
    :key1 => defined? value1 ? value1 : nil, 
    :key2 => defined? value2 ? value2 : nil 
} 

puts hash[:key1] # outputs: ["expression"] 

上記のコードは、式の代わりに(それが定義されている場合)またはゼロを記憶します。

+1

もう少し説明してください。私はあなたの質問を3回読んだが、あなたの問題が何であるかをまだ理解していない。 –

答えて

1

あなたはlambda、またはProcを探しています。

hash = { 
    :key1 => lambda { defined?(value1) ? value1 : nil }, 
    :key2 => lambda { defined?(value2) ? value1 : nil } 
} 

hash[:key1].call 

http://www.ruby-doc.org/core-1.9.2/Kernel.html#method-i-lambda

+0

ありがとうございます。キー1 =>(?定義さVALUE1):ただ括弧を追加することによって、私は 'ハッシュ= {....を探していたんどのようなことがわかりましたか? value1:nil} ' –

0
正確にあなたが何をしたいかどう

ハッシュ[:キー] .nil?

は、キーが存在する場合に応じて、trueまたはfalseを返します。それがあなたが探しているものかどうかはわかりません。

2

d11wtgの答えが行います。また、かっこを追加すると、値は期待どおりに保存されます。

hash = { 
    :key1 => (defined? value1) ? value1 : nil, 
    :key2 => (defined? value2) ? value2 : nil 
}