如何轻松访问类设置器?

时间:2012-12-06 14:37:25

标签: ruby oop setter

如何在同一个班级内轻松访问setter?

让我说我有这个电话:

# some_file.rb , create a new object
temperature = Measurement.new 'temperature', 36.6

一个模特:

# Measurements.rb , some model
class Measurement
  attr_accessor :value, :type
  attr_reader :device, :title, :label

  def initialize type, value
    # This one works, but not trigger the setter
    @type = type
    # And this one trigger setter
    self.type = type
  end

  def type= new_type
    # do something very important
  end    
end

这是否意味着我总是需要使用self.var =而不是@var =如果我想使用这个变量的setter而不在类中的任何地方重命名它?有没有更多的区别,还有一些更好的方法来添加setter?

1 个答案:

答案 0 :(得分:2)

是的,你总是这么做。在Ruby中,实际上并不存在这样的东西。只是一种以=结尾的方法。但是,由于语法歧义,您必须始终在setter中添加一个对象和一个句点,否则Ruby将会看到对局部变量的赋值。

换句话说,请记住@blah是原始访问,并且永远不会触发方法(不完全正确,有一些日志记录和调试hock方法,但从不介意)。

如果你的二传手很重要的话,那就和self.blah=一起生活吧。