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を返します。