我在理解这种封装时遇到了问题。我有使用 attr_accessor 定义的实例变量。我试图在课外访问它们。但它们总是 nil 并返回未定义的方法。
NoMethodError: 未定义的方法 `has_key?'对于 nil:NilClass
请帮我理解。
class TrieNode
attr_reader :value, :next, :children
def initalize
@value = nil
@children = Hash.new
@next = nil
end
end
class Trie
attr_accessor :root
def initialize
@root = TrieNode.new
end
def build_trie(strs)
cur = @root
strs.each do |str|
str.chars.each do |char|
if cur.children.has_key? char
cur = cur.children[char]
next
else
new_node = TrieNode.new
cur.children[char] = new_node
cur = new_node
end
end
cur = @root
end
end
end
答案 0 :(得分:3)
是的,不是封装,是因为你的对象没有正确实例化,是打字错误造成的
DataModel(photo_filename=unique_name(form.photo.data))
# or
DataModel(photo_filename=secure_filename(form.photo.data))
应该是 def initalize
@value = nil
@children = Hash.new
@next = nil
end
而不是initialize