テストコードカント使用||:このコードではハッシュをオーバーライドして、[]演算子はプライベート作る - =もう
class PrivHash < Hash
def set(key, val)
self[key] = val
end
def set_maybe(key, val)
self[key] ||= val
end
private
def []= key, value
end
def [] key
super
end
end
、私はset
とset_maybe
の両方が動作するように期待しています。しかし、唯一のset
作品やset_maybe
がで失敗します。
[30] pry(#<TranslationInfo>):1> ph.set_maybe(:a, 1)
NoMethodError: private method `[]' called for {:a=>2}:#Class:0x007f99c5924c38>::PrivHash
from (pry):56:in `set_maybe'
私はself[:b] ||= <x>
がself[:b] || self[:b] = <x>
のためだけ糖衣構文ですが、私はこれが動作するため、それがない推測と仮定しました。
なぜ私はこのエラーが発生しているのですか。私はクラス内からこれを実行しています。なぜプライベートメソッドエラーが発生しますか?
私はこのエラーメッセージ(Ruby 2.2.4)を取得しませんでした。どのRubyバージョンを使用していますか? – user1934428
2.3.0のエラーを取得しています。 – Amadan
私は実際にルビー2.3の下で同じ動作を観察します。 '|| ='は失敗しますが、 'self [key] || self [key] = val'バージョンが動作します。 Rubyの下2.2 *両方のバージョンが動作します。どうやら、 '|| ='は他のバージョンの文法的な砂糖だけではありません。 – BoraMa