"name":参数数错误(1 表示 0)(参数错误)



Dessert类创建setter和getter,我编写了以下代码:

class Dessert 
  def initialize(name,calories)
    @name=name
    @calories=calories
  end
  def name
    @name
  end
  def name=(names)
    @name=names
  end
  def calories
    @calories
  end
  def calories=(calory)
    @calories=calory
  end       
end
d=Dessert.new("Salad",1200)
puts d.name("Khoresht")
puts d.calories(1600)
puts d.name()
puts d.calories()

setter和getter必须具有相同的名称,编译器通过它们的签名来识别它们。但是在这里,我遇到了错误:

`name': wrong number of arguments (1 for 0) (ArgumentError)   

为方法名(setter)。

为什么会发生?

你应该把d.name("Khoresht")改成d.name=("Khoresht")

d=Dessert.new("Salad",1200)
d.name = "Khoresht" # use setter method, equal to d.name=("Khoresht")
d.calories = 1600 
puts d.name
puts d.calories

setter和getter有不同的名字,在你的代码中,setter方法的名字包含一个=

胖胖已经回答了你的问题。我只是想提一下,在Ruby中定义getter和setter方法是不常见的。

一种常见的方法是使用attr_accessor来声明getter和setter方法。下面的示例相当于您的代码:

class Dessert 
  attr_accessor :name, :calories
  def initialize(name, calories)
    @name = name
    @calories = calories
  end
end

和其他选项可能是从Struct继承。下面的示例与您的代码具有相同的行为:

 class Dessert < Struct.new(:name, :calories)
 end

相关内容

最新更新