我是Ruby的新手。有没有办法做到以下几点?
hash = {
:key1 => defined? value1 ? value1 : nil,
:key2 => defined? value2 ? value2 : nil
}
puts hash[:key1] # outputs: ["expression"]
上面的代码存储表达式,而不是值(如果已定义)或 nil (如果未定义)。
答案 0 :(得分:2)
d11wtg答案会做。此外,通过添加括号,值将按预期存储:
hash = {
:key1 => (defined? value1) ? value1 : nil,
:key2 => (defined? value2) ? value2 : nil
}
答案 1 :(得分: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
答案 2 :(得分:0)
你到底想做什么?
散列[:键] .nil
将返回true或false,具体取决于密钥是否存在。不确定这是不是你想要的。