私はRubyを初めて使用し、次のことを行いました。
c = {}
# Some code in the middle
c['a'] = c['a'] or 0
これで、これが次のように機能することが期待されます。isの場合、 0c['a']が返されます。したがって、の値は0である必要があります。nilc['a'] or 0c['a']
ただし、の値はc['a']ですnil。なぜこれが起こるのですか?
私はRubyを初めて使用し、次のことを行いました。
c = {}
# Some code in the middle
c['a'] = c['a'] or 0
これで、これが次のように機能することが期待されます。isの場合、 0c['a']が返されます。したがって、の値は0である必要があります。nilc['a'] or 0c['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)
または||、いつものように使用してください:)