2012-12-06 41 views
2

如何在同一班级轻松访问二传手?如何轻松访问class 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?

+0

您的代码很混乱。在定义构造函数之前,您将无法创建实例。代码中的顺序是错误的,或者您需要明确指出您引用了代码的两个不同部分。 – sawa

+0

谢谢,它实际上是两个不同的文件。 – lifecoder

回答

2

是的,你总是这样做。在Ruby中,没有一个真正的setter。只是一个结束于=的方法。但是,由于语法歧义,您必须始终使用对象和句点作为前缀,否则Ruby将会看到对局部变量的分配。

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

所以只要住在self.blah=如果你的二传手很重要。