要为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)
表示方法名称(设置者)。
为什么会这样?
答案 0 :(得分:2)
您应该将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方法名称包含=
。
答案 1 :(得分:2)
相反,常见的方法是使用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