Ruby - 类方法

标签 ruby methods

我是刚开始学习 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 上正确调用了它> 最后几行中的类,但不能在实例上调用它(例如 pessoa1pessoa2,或者 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/

相关文章:

ruby - ruby 中的 $~ 是什么

ruby - 难以理解可选括号

java - 找不到符号 - 拆分方法 (Java)

java - 我的鸡尾酒排序代码有什么问题?

java - 将值从一个非静态方法传递到另一个主方法?

php - 如何停止 PHP 类中的其他方法?

Ruby: gem Prawn: print wraps and goes upside down

ruby-on-rails - 如何在 Rails 中同时使用 form_with 和 simple_form_for?

javascript - 为什么我的表单没有提交我想要的内容?

php - 基于测试动态调用php对象方法?