我在项目中使用Trie(https://github.com/tyler/trie)gem并喜欢它。但它有一个问题真的很烦人。
找不到密钥时, has_key?
方法返回nil
而不是false
(因为每个以?
结尾的方法都应该)
我尝试在他们的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
的位置?还有别的吗?
答案 0 :(得分:2)
从您的错误消息中,您似乎在has_key?
类上调用Trie
方法,而不是它的实例。如果您创建一个实例,您的代码就可以正常工作:
my_trie = Trie.new
my_trie.has_key?('foo')
# My new Trie has_key
# => nil
答案 1 :(得分:1)
所以我发现了问题。
我的新课程嵌套在我的Rails应用程序的/lib
文件夹下。我一把它移到/lib/utils/
就行了!
这意味着加载程序在实际Trie
类之前选择了我的自定义类。仍不确定原因。
答案 2 :(得分:1)
你可以更简单地修补:
class Trie
def has_key?(key)
!!super
end
end