预定义变量
Pre-defining variables
这是我的 class 结构:
class Commodity
def initialize(name)
@name = name
end
class PriceSeries
def initialize(name)
@name = name
end
end
end
我想实例化 Commodity
class:
gold = Commodity.new("gold")
然后实例化 PricePoint
class:
gold.xau = Commodity::PriceSeries.new("gold")
看来我只能用黄金class中的一个名为xau
的属性访问器来做到这一点。这是定义该变量的唯一方法吗?
def xau
xau
end
我觉得这不应该是一个函数。
好吧,有很多方法可以做到,但是 attr_accessor
是迄今为止最简单的方法:
class Commodity
attr_accessor :xau
end
gold = Commodity.new("gold")
gold.xau = some_value
attr_accessor :xau
所做的是定义一个 xau=
方法,该方法将其参数分配给实例变量 @xau
,另一个方法 xau
returns @xau
的值。换句话说,它基本上是这样做的:
class Commodity
# Setter
def xau=(value)
@xau = value
end
# Getter
def xau
@xau
end
end
为了方便和可读性,Ruby允许你在gold.xau = foo
中的=
之前放置空格,但实际上它与方法调用gold.xau=(foo)
相同。
我很确定你想要的是attr_accessor
:
class Commodity
attr_accessor :xau
end
本质上等同于:
class Commodity
def xau
@xau
end
def xau=(value)
@xau = value
end
end
不清楚你想做什么,但看起来你想这样做:
class Commodity
def initialize(name)
@name = name
@xau = Commodity::PriceSeries.new(name)
end
end
然后,
gold = Commodity.new("gold")
会自动定义
Commodity::PriceSeries.new("gold")
作为gold
的实例变量@xau
的值。
这是我的 class 结构:
class Commodity
def initialize(name)
@name = name
end
class PriceSeries
def initialize(name)
@name = name
end
end
end
我想实例化 Commodity
class:
gold = Commodity.new("gold")
然后实例化 PricePoint
class:
gold.xau = Commodity::PriceSeries.new("gold")
看来我只能用黄金class中的一个名为xau
的属性访问器来做到这一点。这是定义该变量的唯一方法吗?
def xau
xau
end
我觉得这不应该是一个函数。
好吧,有很多方法可以做到,但是 attr_accessor
是迄今为止最简单的方法:
class Commodity
attr_accessor :xau
end
gold = Commodity.new("gold")
gold.xau = some_value
attr_accessor :xau
所做的是定义一个 xau=
方法,该方法将其参数分配给实例变量 @xau
,另一个方法 xau
returns @xau
的值。换句话说,它基本上是这样做的:
class Commodity
# Setter
def xau=(value)
@xau = value
end
# Getter
def xau
@xau
end
end
为了方便和可读性,Ruby允许你在gold.xau = foo
中的=
之前放置空格,但实际上它与方法调用gold.xau=(foo)
相同。
我很确定你想要的是attr_accessor
:
class Commodity
attr_accessor :xau
end
本质上等同于:
class Commodity
def xau
@xau
end
def xau=(value)
@xau = value
end
end
不清楚你想做什么,但看起来你想这样做:
class Commodity
def initialize(name)
@name = name
@xau = Commodity::PriceSeries.new(name)
end
end
然后,
gold = Commodity.new("gold")
会自动定义
Commodity::PriceSeries.new("gold")
作为gold
的实例变量@xau
的值。