如何在同一个班级内轻松访问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 :(得分:2)
是的,你总是这么做。在Ruby中,实际上并不存在这样的东西。只是一种以=
结尾的方法。但是,由于语法歧义,您必须始终在setter中添加一个对象和一个句点,否则Ruby将会看到对局部变量的赋值。
换句话说,请记住@blah
是原始访问,并且永远不会触发方法(不完全正确,有一些日志记录和调试hock方法,但从不介意)。
如果你的二传手很重要的话,那就和self.blah=
一起生活吧。