在Ruby中,我试图编写一个使用变量的行(如果已经设置),否则默认为某个值:
myvar = # assign it to ENV['MY_VAR'], otherwise assign it to 'foobar'
我可以像这样编写这段代码:
if ENV['MY_VAR'].is_set? #whatever the function is to check if has been set
  myvar = ENV['MY_VAR']
else
  myvar = 'foobar'
end
但这是相当冗长的,我试图以最简洁的方式编写它.我怎样才能做到这一点?
und*_*gor 70
myvar = ENV['MY_VAR'] || 'foobar'
注意这有点不正确(如果哈希值可以包含值nil),但由于ENV只包含字符串,所以它可能已经足够了.
mu *_*ort 37
一般Hash最可靠的方法是询问它是否有密钥:
myvar = h.has_key?('MY_VAR') ? h['MY_VAR'] : 'default'
如果你不关心nil或false值(即你要正确对待他们一样的"不存在"),然后undur_gongor的做法是很好的(这时候也应该是罚款h的ENV):
myvar = h['MY_VAR'] || 'foobar'
如果你想允许nil进入你的哈希,但假设它不存在(即一个nil值与"不存在"相同),同时允许false你的哈希:
myvar = h['MY_VAR'].nil? ? 'foobar' : h['MY_VAR']
最后,它实际上取决于您的确切意图,您应该选择符合您意图的方法.选择之间if/else/end和? :,当然的,口味的问题和"简洁"并不意味着"最少字符数"可以随意使用三元或if如所需的块.
And*_*imm 23
hash.fetch(key) { default_value }
如果值存在则返回值,default_value如果该键不存在则返回.
小智 8
This works best for me:
ENV.fetch('VAR_NAME',"5445")
myvar = ENV.fetch('MY_VAR') { 'foobar' }
'foobar'如果未设置则为默认值  ENV['MY_VAR']。