私はプロジェクトでTrie(https://github.com/tyler/trie)gemを使用し、それを愛しています。しかし、それは本当に不愉快な一つの問題を抱えています。キーが代わりにfalse
で見つからない場合Trie gemのRubyオーバーライドメソッド - 未定義メソッド
has_key?
方法は、(?
でなければならない終わるすべてのメソッドとして)
をnil
を返し、私は彼らのGitHub(https://github.com/tyler/trie/issues/26)上の問題が、運を開くしようとしました。
妥当な次のステップ - メソッドをオーバーライドしてみてください。
私は自分のプロジェクトにこれを追加しました:
class Trie
alias :old_has_key? :has_key?
def has_key?(key)
puts "My new Trie has_key"
old_has_key?(key)
end
end
私はそれで逃げることができるかどうかだけを参照すること。私はrails console
を実行したときに
は残念ながら、私が取得:
`<class:Trie>': undefined method `has_key?' for class `Trie' (NameError)
私は他の場所で見られるように、これは動作するはずです。それはなぜですか?
ここに何がありますか?場所:trie.rb
?他に何か?
述語方法の最も一般的に受け入れられている定義は、それがtruthyまたはfalsey値を返すということです。偽の値として 'nil'を返すことは、ほとんどの場合ここでうまくいきます。 'if trie.has_key?( '何でも')'のような条件で使うと、 'false'がベンを返すのと同じように動作します。 –
もっとも明白な例は 'defined?'演算子です(技術的にはメソッドではありません)。これは未定義の場合は 'nil'を、それ以外の場合は定義を表す文字列を返します。 –
正しいことは議論の余地がありますが、そのメソッドは誤っていると答えています。 私はそれがほとんどの場合に機能することを知っていますが、他のブール値と比較しようとしているときには機能しません。 私の質問はまだ残っています、なぜ私はそのエラーを取得する、それは私を困惑させるものです。 – Milan