ruby - 如何轻松访问类 setter ?

标签 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

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

最佳答案

是的,你总是这样。在 Ruby 中,并不存在真正的 setter 之类的东西。只是一个以 = 结尾的方法。然而,由于语法不明确,您必须始终在 setter 前面添加一个对象和一个句点,否则 Ruby 会看到对局部变量的赋值。

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

所以,如果你的 setter 如此重要,就接受 self.blah= 吧。

关于ruby - 如何轻松访问类 setter ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13745876/

相关文章:

ruby-on-rails - 设计和 AJAX : Can't verify CSRF token authenticity after sign in

java - 在Java中销毁对同一对象的多个引用

domain-driven-design - DDD 和 Getter 和 Setter 的使用

c# - Style Setter 中的 UWP 绑定(bind)不起作用

javascript - 将 Javascript getter/setter 复制到另一个原型(prototype)对象

ruby - 运行 Docker 时尚未 check out git 源

ruby - 为什么我不能从 ruby​​ 中的类方法中调用 include?

ruby-on-rails - Rails 4 Devise 重新激活 "soft deleted"帐户

java - switch 语句在这里是否合适,采用枚举?

javascript - 无需点击 'li' 即可运行函数