私はRubyを初めて使用し、次のことを行いました。
c = {}
# Some code in the middle
c['a'] = c['a'] or 0
これで、これが次のように機能することが期待されます。isの場合、 0c['a']
が返されます。したがって、の値は0である必要があります。nil
c['a'] or 0
c['a']
ただし、の値はc['a']
ですnil
。なぜこれが起こるのですか?
私はRubyを初めて使用し、次のことを行いました。
c = {}
# Some code in the middle
c['a'] = c['a'] or 0
これで、これが次のように機能することが期待されます。isの場合、 0c['a']
が返されます。したがって、の値は0である必要があります。nil
c['a'] or 0
c['a']
ただし、の値はc['a']
ですnil
。なぜこれが起こるのですか?
or
||
Rubyと同じではありません。あなたが持っているものは次のようにグループ化されます:
(c['a'] = c['a']) or 0
基本的には何もしません。||
代わりに使用する必要があります:
c['a'] = c['a'] || 0
または単に:
c['a'] ||= 0
and
/は/と&&
同じ動作をすることに注意してください。or
||
=
はよりも優先順位が高いor
ため、期待どおりに動作させるには括弧が必要です。
c['a'] = (c['a'] or 0)
または||
、いつものように使用してください:)