从类外部访问实例变量

时间:2021-03-31 15:01:17

标签: ruby ruby-on-rails-3 encapsulation

我在理解这种封装时遇到了问题。我有使用 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

1 个答案:

答案 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