1

私は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。なぜこれが起こるのですか?

4

2 に答える 2

4

or||Rubyと同じではありません。あなたが持っているものは次のようにグループ化されます:

(c['a'] = c['a']) or 0

基本的には何もしません。||代わりに使用する必要があります:

c['a'] = c['a'] || 0

または単に:

c['a'] ||= 0

and/は/と&&同じ動作をすることに注意してください。or||

于 2012-10-14T15:44:53.103 に答える
2

=はよりも優先順位が高いorため、期待どおりに動作させるには括弧が必要です。

c['a'] = (c['a'] or 0)

または||、いつものように使用してください:)

于 2012-10-14T15:44:23.350 に答える