需要帮助,我想使用“ attr_accesor”方法来节省代码中的空间,并使用它代替“ get_value”和“ set_value”,但是如何?
如果代码是:
class Thing
def initialize(aName, aDescription)
@name = aName
@description = aDescription
end
def get_name
return @name
end
def set_name(aName)
@name = aName
end
def get_description
return @description
end
def set_description(aDescription)
@description = aDescription
end
end
class Treasure < Thing
def initialize(aName, aDescription, aValue)
super(aName, aDescription)
@value = aValue.to_f
end
def get_value
return @value
end
def set_value(aValue)
@value = aValue.to_f
end
end
t1 = Thing.new("Rock", "costless thing")
puts "Name: #{t1.get_name}"
puts "Description: #{t1.get_description}"
puts ""
puts "Treasure"
t2 = Treasure.new("Nugget", "A gold Nugget", "50000")
puts "Name: #{t2.get_name}"
puts "Description: #{t2.get_description}"
puts "Value: #{t2.get_value}"
您能告诉我们如何使用attr_accesor方法重写Thing和Treasure类吗?
答案 0 :(得分:1)
您只需将它们添加到您的类定义中,对于Thing
类,您需要添加
attr_accessor :name, :description
对于您需要的Treausre
类,
attr_accessor :value
,它将在您的类中公开getter和setter方法,
如果您只需要定义getter或setter,则可以使用以下内容,
attr_reader -> getter method
attr_writer -> setter method
您的班级现在应该看起来像
class Thing
attr_accessor :name, :description
def initialize(name, description)
@name = name
@description = description
end
end
class Treasure < Thing
attr_accessor :value
def initialize(name, description, value)
super(name, description)
@value = value.to_f
end
end
现在您可以做类似的事情
t1 = Thing.new("Rock", "costless thing")
puts "Name: #{t1.name}"
puts "Description: #{t1.description}"
puts ""
puts "Treasure"
t2 = Treasure.new("Nugget", "A gold Nugget", "50000")
puts "Name: #{t2.name}"
puts "Description: #{t2.description}"
puts "Value: #{t2.value}"
答案 1 :(得分:1)
attr_accessor
只不过是为您定义这些getter和setter方法的快捷方式。
此:
attr_accessor :index
从字面上将为您执行此操作,而无需任何其他代码:
def index
return @index
end
def index=(value)
@index = value
end
如果您熟悉C
语言,可以将其视为无需额外输入即可为您定义基本getter和setter的宏。如前所述,attr_reader
仅会定义一个吸气剂,attr_writer
仅会定义一个吸气剂,而attr_accessor
会同时定义一个吸气剂。
请注意,所有这些都不会简单地通过将实例变量@index
放在代码中来定义,这仍然需要在代码的其他位置(例如{{1})中的@index = -1
进行定义。 }方法(或代码中最合适的位置),如果您需要一个“默认”值。