在某些语言中,你可以访问对象的属性,而无需编写自己的getter/setter方法。
对象是否内置了 Ruby 的 getter/setter?
这是我正在尝试的:
class Obj
def initialize(color)
@color = color
end
end
t = Obj.new("red")
puts t.color
如果您只想运行磨机自动生成的吸气剂/二传手,您正在寻找attr_accessor :color
。
为此模块定义一个命名属性,其中名称为 symbol.id2name,创建一个实例变量 (@name( 和一个相应的访问方法来读取它。还创建一个名为 name= 的方法来设置属性。字符串参数将转换为符号。
如果您不希望能够在类之外设置值,也只有一个attr_reader :color
创建返回每个实例变量值的实例变量和相应的方法。
如果您想在课堂外设置但不阅读,attr_writer :color
。
创建一个访问器方法以允许分配给属性。
class Obj
attr_accessor :color
def initialize(color)
@color = color
end
end
t = Obj.new("red")
t.color #=> "red"
我发现这些方法似乎存在于Ruby中的所有对象中:
t.instance_variable_set(:@color, "blue")
t.instance_variable_get(:@color)