我想转此代码:
if obj[:id]
begin
foo = JSON.parse(obj[:foo])
if ! foo['bar']
something_is_off = true
end
rescue JSON::ParserError
something_is_off = true
end
else
something_is_off = true
end
成为以下类型的东西:
something_is_off = ...
红宝石可以吗?
答案 0 :(得分:1)
喜欢这个
something_is_off = ! obj[:id] or ! begin
foo = JSON.parse obj[:foo]
! foo['bar']
rescue JSON::ParserError; end
答案 1 :(得分:1)
这就是我的所作所为:
something_is_off = lambda {
return true unless obj[:id]
begin
foo = JSON.parse(obj[:foo])
rescue JSON::ParserError
return true
end
! foo['bar']
}.call
答案 2 :(得分:1)
此前的答案绝对正确,没有必要引入新的foo
变量:
something_is_off = !(obj[:id] && JSON.parse(obj[:foo])['bar']) rescue true
实际上,当{em> obj 的something_is_off
和:id
评估为true时,obj[:foo]['bar']
为false。所以,KISS。