Ruby:如何检查哈希定义中是否存在变量

我是Ruby的新手。 有没有办法做到以下几点?

hash = { :key1 => defined? value1 ? value1 : nil, :key2 => defined? value2 ? value2 : nil } puts hash[:key1] # outputs: ["expression"] 

上面的代码存储表达式,而不是 (如果已定义)或nil (如果未定义)。

你正在寻找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

d11wtg答案会做。 此外,通过添加括号,值按预期存储:

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

你究竟想做什么?

哈希[:键] .nil?

将返回true或false,具体取决于密钥是否存在。 不确定这是不是你想要的。