Ich benutze Trie (https://github.com/tyler/trie) Edelstein im Projekt und liebe es. Aber es hat ein Problem, das wirklich nervt.Ruby Overriding-Methode von Trie gem - undefined Methode
has_key?
Methode gibt nil
, wenn der Schlüssel nicht statt false
(wie jede Methode mit ?
sollte Endung)
Ich habe versucht, ein Problem auf ihre GitHub Öffnung (https://github.com/tyler/trie/issues/26) aber kein Glück.
Also, vernünftiger nächster Schritt - versuchen Sie, die Methode zu überschreiben.
Ich habe das mein Projekt:
class Trie
alias :old_has_key? :has_key?
def has_key?(key)
puts "My new Trie has_key"
old_has_key?(key)
end
end
Nur um zu sehen, ob ich damit durchkommen kann.
Leider, wenn ich rails console
laufen erhalte ich:
`<class:Trie>': undefined method `has_key?' for class `Trie' (NameError)
Wie ich an anderer Stelle gefunden, sollte diese Arbeit. Irgendeine Idee, warum es nicht tut?
Was fehlt mir hier? Standort von trie.rb
? Etwas anderes?
Die am häufigsten akzeptierte Definition von Prädikat Verfahren ist, dass es einen truthy oder Falsey Wert zurückgibt. Die Rückkehr von "Null" als falschem Wert funktioniert hier meistens gut. Wenn Sie es in einer Bedingung wie 'if trie.has_key '(' was auch immer ') verwenden, funktioniert es genau so, als ob' false 'zurückgegeben worden wäre. –
Das offensichtlichste Beispiel ist der 'Defined?' - Operator (technisch keine Methode), der 'nil' für undefined und eine Zeichenfolge zurückgibt, die die Definition anders beschreibt. –
Ok, was richtig ist, ist strittig, aber selbst ihre Dokumente sind falsch, weil sie sagen, dass die Methode 'true/false' zurückgibt, was nicht der Fall ist. Ich weiß, dass es in den meisten Fällen funktioniert, aber es funktioniert nicht, wenn Sie versuchen, es mit einem anderen booleschen Wert zu vergleichen. Meine Frage bleibt noch, warum ich diesen Fehler bekomme, das verwirrt mich. – Milan