Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby类继承_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Ruby类继承

Ruby on rails Ruby类继承,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我定义了节点类和播放器类,如下所示: class Node < OpenStruct def initialize(parent,tag,&block) super() self.parent = parent self.parent.children << self unless parent.nil? self.children = [] self.tag = tag instance_eval(&bloc

我定义了节点类和播放器类,如下所示:

class Node < OpenStruct
  def initialize(parent,tag,&block)
    super()
    self.parent = parent
    self.parent.children << self unless parent.nil?
    self.children = []
    self.tag = tag
    instance_eval(&block) unless block.nil?
  end
end

class Player < Node
  def initialize(parent)
    Node.new(parent,:player) do 
      self.turn_num = 1
    end
  end
end
我得到了一个错误:

in `method_missing': undefined method `[]' for nil:NilClass (NoMethodError)
你能帮我找出哪里出了问题吗?谢谢

编辑:

问题应该是Player类中的初始化。我换了密码

class Player < Node
      def self.new(parent)
        Node.new(parent,:player) do 
          self.turn_num = 1
        end
      end
 end
class-Player

那个么就并没有错误了。这里的初始化有什么问题吗?

您不需要在播放器内部初始化节点,因为任何播放器实例都已经是节点实例了。相反,您应该将预期参数传递到
super

class Player < Node
  def initialize(parent,&block)
    super(parent, :player, &block)
    self.turn_num = 1
  end
end
class-Player

通常,重写
.new
,这是一个坏主意——默认情况下为所有Ruby对象定义的,用于分配内存,然后运行initialize方法(如果存在)。当您将其覆盖为
self.new
时,您只返回一个裸
节点
实例,而不是
播放器
实例。

错误消息是不言自明的:您有一个
nil
,您正试图用它来做一些事情。@picklishdoor>当然。我想知道在哪里产生了一个零。我发现这个球员不是一个好球员nil@PicklishDoorknob.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/ostruct.rb:174:in
method_missing:test中nil:NilClass(nomethoderor)的未定义方法
class Player < Node
  def initialize(parent,&block)
    super(parent, :player, &block)
    self.turn_num = 1
  end
end