我是刚开始学习 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
最佳答案
在 Pessoa#initialize
执行期间,self
持有类 Pessoa
的一个实例。因此,您正试图在类 Pessoa
的实例上调用 new
。
这是不可能的,因为 new
是类 Class
的实例方法:您在 Pessoa
上正确调用了它> 最后几行中的类,但不能在实例上调用它(例如 pessoa1
或 pessoa2
,或者 self
Pessoa#initialize
方法),因为它们都不是类,因此不定义新
方法。
正确的代码是:
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
关于Ruby - 类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419356/