2

如何在同一个类中轻松访问 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 =如果我想使用带有这个变量的设置器而不在类中的任何地方重命名它?有没有更多的区别,以及添加二传手的更好方法?

4

1 回答 1

2

是的,你总是这样。在 Ruby 中,并不存在真正意义上的 setter。只是一种以=. 但是,由于语法歧义,您必须始终在 setter 前加上一个对象和一个句点,否则 Ruby 将看到对局部变量的赋值。

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

self.blah=所以,如果你的二传手那么重要,那就忍受吧。

于 2012-12-06T14:47:18.720 回答