def bar(foo)
foo.nil? ? nil : foo.to_i
end
「foo.nil??nil:foo.to_i」の簡潔なRubyイディオム?
またはもう少し短い(そうfooであるとは思わない場合false)
def bar(foo)
foo.to_i if foo
end
foo and foo.to_i
ブール演算子は短絡し、最後に評価された式の値を返します。
foo is の場合はnil返され、foo.to_i実行されません。foo ではない 場合nil、foo.to_iが評価され、その結果が返されます。def bar(foo)
foo.to_i unless foo.nil?
end
しかし、IMO を排除することを除いて、実際には何も得られません? ?。これは 1 文字短く、Ruby の知識があれば読みやすい可能性があります。三項よりも「より簡潔」と見なされるため、わかりません。
(この場合、自明ではない動作と見なされる可能性があるため、「潜在的に」と言いますnil。)
Rails の ActiveSupport を使用する場合は、tryメソッドを使用して記述できます。
foo.try(:to_i)
このイディオムの破壊的なバージョンが実際に必要な場合、つまり
foo = (foo.nil? ? nil : foo.to_i)
それからあなたはすることができます
foo &&= foo.to_i
andandgemを使用します
これは私が行くことを可能にします:
foo.andand.to_i
これは、fooがnilの場合はnilを返し、それ以外の場合はto_iを返します。