这是我的班级结构:
class Commodity
def initialize(name)
@name = name
end
class PriceSeries
def initialize(name)
@name = name
end
end
end
我想实例化Commodity
类:
gold = Commodity.new("gold")
然后实例化PricePoint
类:
gold.xau = Commodity::PriceSeries.new("gold")
似乎我只能在gold类中使用名为xau
的属性访问器来执行此操作。这是定义该变量的唯一方法吗?
def xau
xau
end
我觉得这不应该是一种功能。
答案 0 :(得分:1)
嗯,有很多方法可以做到,但attr_accessor
是迄今为止最简单的方法:
class Commodity
attr_accessor :xau
end
gold = Commodity.new("gold")
gold.xau = some_value
attr_accessor :xau
做的是定义一个xau=
方法,将其参数分配给实例变量@xau
,另一个方法xau
返回@xau
的值}。换句话说,它基本上是这样做的:
class Commodity
# Setter
def xau=(value)
@xau = value
end
# Getter
def xau
@xau
end
end
为了方便和可读性,Ruby允许您在=
gold.xau = foo
之前放置空格,但实际上它与方法调用gold.xau=(foo)
相同。
答案 1 :(得分:0)
我非常确定你想要的是attr_accessor
:
class Commodity
attr_accessor :xau
end
这基本上等同于:
class Commodity
def xau
@xau
end
def xau=(value)
@xau = value
end
end
答案 2 :(得分:0)
目前尚不清楚您想要做什么,但看起来您想要这样做:
class Commodity
def initialize(name)
@name = name
@xau = Commodity::PriceSeries.new(name)
end
end
然后,
gold = Commodity.new("gold")
会自动定义
Commodity::PriceSeries.new("gold")
作为@xau
的实例变量gold
的值。