Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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类方法_Ruby_Methods - Fatal编程技术网

Ruby类方法

Ruby类方法,ruby,methods,Ruby,Methods,我是一个开始学习Ruby的新手。我已经创建了这段代码,但是它返回它一直返回NoMethodError,未定义的方法new。我做错了什么 class Pessoa attr_accessor :nome, :idade, :altura @@lista = [] def self.lista @@lista end def initialize(nome, idade, altura) pessoa = self.new pessoa.nome =

我是一个开始学习Ruby的新手。我已经创建了这段代码,但是它返回它一直返回
NoMethodError,未定义的方法new
。我做错了什么

class Pessoa
  attr_accessor :nome, :idade, :altura

  @@lista = []

  def self.lista
    @@lista
  end

  def initialize(nome, idade, altura)
    pessoa = self.new
    pessoa.nome = nome
    pessoa.idade = idade
    pessoa.altura = altura
    @@lista << self
  end
end

pessoa1 = Pessoa.new("Joao",13,2)
pessoa2 = Pessoa.new("Alfredo",15,1)
puts Pessoa.lista.inspect
类
属性访问器:nome,:idade,:altura
@@lista=[]
def self.lista
@@利斯塔
结束
def初始化(nome、idade、altura)
pessoa=self.new
pessoa.nome=nome
pessoa.idade=idade
pessoa.altura=altura

@@lista那
pessoa=self.new
是你的问题<对已创建的对象调用代码>初始化
以设置其初始状态,因此

  • self
    没有
    new
    方法(因为它不是类)

  • 在其中创建一个对象并将其分配给局部变量
    pessoa
    ,没有任何意义,因为它将在方法完成后消失

  • 我想你想要的是:

    def initialize(nome, idade, altura)
      @nome = nome
      @idade = idade
      @altura = altura
      @@lista << self
    end
    
    def初始化(nome、idade、altura)
    @nome=nome
    @idade=idade
    @阿尔图拉
    
    @@在执行
    Pessoa#initialize
    self
    期间,lista保存类
    Pessoa
    的实例。因此,您试图在类
    Pessoa
    的实例上调用
    new
    。 这是不可能的,因为
    new
    是类
    class
    的一个实例方法:在最后一行中,您在
    Pessoa
    类上正确调用了它,但不能在实例上调用它(例如
    pessoa1
    pessoa2
    Pessoa\initialize
    方法中的
    self
    ),因为它们都不是类,因此不定义新的
    方法

    正确的代码是:

    class Pessoa
      attr_accessor :nome, :idade, :altura
    
      @@lista = []
    
      def self.lista
        @@lista
      end
    
      def initialize(nome, idade, altura)
        @nome = nome
        @idade = idade
        @altura = altura
        @@lista << self
      end
    end
    
    pessoa1 = Pessoa.new("Joao",13,2)
    pessoa2 = Pessoa.new("Alfredo",15,1)
    puts Pessoa.lista.inspect
    
    类
    属性访问器:nome,:idade,:altura
    @@lista=[]
    def self.lista
    @@利斯塔
    结束
    def初始化(nome、idade、altura)
    @nome=nome
    @idade=idade
    @阿尔图拉
    @@利斯塔