我是一个开始学习Ruby的新手。我已创建此代码,但它返回它继续返回NoMethodError, undefined method 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
答案 0 :(得分:6)
在执行Pessoa#initialize
期间self
拥有类Pessoa
的实例。因此,您尝试在类new
的实例上调用Pessoa
。
这是不可能的,因为new
是类Class
的实例方法:您在最后一行的Pessoa
类中正确调用它,但是您无法在实例(例如pessoa1
或pessoa2
或self
方法中的Pessoa#initialize
)上调用它,因为它们都不是类,因此不要定义new
方法。
正确的代码是:
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
答案 1 :(得分:3)
pessoa = self.new
是你的问题。对已经创建的对象调用initialize
来设置其初始状态,所以
self
那里没有new
方法(因为它不是一个类)
在那里创建一个对象并将其分配给局部变量pessoa
是没有意义的,因为它会在方法完成后消失
我认为你想要的是:
def initialize(nome, idade, altura)
@nome = nome
@idade = idade
@altura = altura
@@lista << self
end