如何在同一个类中轻松访问 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
这是否意味着如果我想对这个变量使用setter而不在变量中的任何地方重命名它,我总是需要使用self.var =
而不是@var =
类(class)?还有更多的区别和更好的方法来添加 setter 吗?
最佳答案
是的,你总是这样。在 Ruby 中,并不存在真正的 setter 之类的东西。只是一个以 =
结尾的方法。然而,由于语法不明确,您必须始终在 setter 前面添加一个对象和一个句点,否则 Ruby 会看到对局部变量的赋值。
换句话说,请记住@blah
是原始访问,并且永远不会触发方法(不完全正确,有一些日志记录和调试 Hook 方法,但没关系)。
所以,如果你的 setter 如此重要,就接受 self.blah=
吧。
关于ruby - 如何轻松访问类 setter ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13745876/