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

时间:2011-10-26 13:55:33

标签: ruby hash if-statement

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 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

答案 2 :(得分:0)

你到底想做什么?

  

散列[:键] .nil

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