Ruby:如何检查散列定义中是否存在变量

Ruby:如何检查散列定义中是否存在变量,ruby,hash,if-statement,Ruby,Hash,If Statement,我对Ruby不熟悉。有没有办法做到以下几点 hash = { :key1 => defined? value1 ? value1 : nil, :key2 => defined? value2 ? value2 : nil } puts hash[:key1] # outputs: ["expression"] 上面的代码存储表达式,而不是值(如果已定义)或nil(如果未定义) 你到底想做什么 散列[:key].nil 将返回true或false,具体取决于密钥是否

我对Ruby不熟悉。有没有办法做到以下几点

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

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

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

你到底想做什么

散列[:key].nil


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

您要找的是
lambda
Proc

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

hash[:key1].call

d11wtg答案就可以了。此外,通过添加括号,值按预期存储:

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

你能再解释一下吗?我已经读了你的问题三遍了,仍然不明白你的问题是什么。谢谢你。刚刚发现,通过添加括号可以实现我想要的<代码>哈希={:key1=>(已定义?value1)?value1:nil}