首页 > 解决方案 > 从类外部访问实例变量

问题描述

我在理解这种封装时遇到问题。我有用 attr_accessor 定义的实例变量。我正在尝试在课外访问它们。但它们总是 nil 并返回未定义的方法。

NoMethodError:未定义的方法“has_key?” 对于零: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

标签: rubyruby-on-rails-3encapsulation

解决方案


是的,不是封装,是因为你的对象没有正确实例化,是错字造成的

  def initalize
        @value = nil
        @children = Hash.new
        @next = nil
  end

initialize不应该initalize


推荐阅读