2011-10-26 102 views
2

我是Ruby新手。有沒有辦法做到以下幾點?Ruby:如何檢查哈希定義中是否存在變量

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

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

上面的代碼存儲的表達,而不是(如果它被定義)或(如果沒有定義的話)。

+1

您可以試着解釋一點點嗎?我已經讀了三次你的問題,但仍然不明白你的問題是什麼。 –

回答

1

您正在尋找lambdaProc

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

謝謝你。剛剛發現通過添加括號可以實現我正在尋找的內容....'hash = {:key1 =>(defined?value1)? value1:nil}' –

0

你究竟想做什麼?

hash [:key] .nil?

將返回true或false,具體取決於密鑰是否存在。不知道這是你在找什麼。

2

d11wtg答案就行了。此外,通過添加括號,數值按預期存儲:

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