Ruby对象有内置的getter / setter方法吗?

时间:2017-07-20 01:11:55

标签: ruby

在某些语言中,您可以访问对象的属性,而无需编写自己的getter / setter方法。

对象是否内置了使用Ruby的getter / setter?

以下是我正在尝试的内容:

class Obj
  def initialize(color)
    @color = color
  end
end

t = Obj.new("red")

puts t.color

2 个答案:

答案 0 :(得分:6)

如果您只想运行磨机自动生成的getter / setter,那么您正在寻找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"

答案 1 :(得分:0)

我发现Ruby中的所有对象似乎都存在这些方法:

t.instance_variable_set(:@color, "blue")
t.instance_variable_get(:@color)