【问题标题】:Ruby: automatically call a method when attribute is setRuby:设置属性时自动调用方法
【发布时间】:2017-01-12 23:05:23
【问题描述】:

我是 Ruby 新手,更一般地是面向对象编程。

我想我想要的正是this 的Ruby 翻译。也就是说,我希望能够初始化一个类的实例,然后一旦设置了某个属性,就调用它的方法来转换它。

例如,假设我有一个带有温度属性的 Weather 类,我想在设置后立即将其从华氏温度转换为摄氏温度。这是我希望这样做的方式。

today = Weather.new
today.temp = 32
today.temp     # => 0

我该怎么做?

【问题讨论】:

    标签: ruby class properties


    【解决方案1】:

    您可以编写自己的attr_writer 样式方法来完成此操作。如果不清楚,请随时发表评论。

    class Weather
      attr_reader :temp
      def temp=(val)
        @temp = f_to_c(val)
      end
      def f_to_c(temp)
        (temp - 32).to_f * (5.0 / 9.0) 
      end
    end
    

    【讨论】:

    • 我刚刚将它翻译成我的实际上下文,效果很好,谢谢。就清晰度而言,我认为我不太了解 attr_writer 是什么以及做什么,我需要与它作斗争。我认为This 会有所帮助。看到我想要完成的事情的正确实现肯定会有所帮助。
    • Module#attr_writer 是一种生成属性写入器方法的方法。它的实现(大致)如下所示:class Module; def attr_writer(*methods) methods.each do |method| define_method(:"#{method}=") do |val| instance_variable_set(:"@#{method}", val) end end end end.
    猜你喜欢
    • 2018-05-12
    • 1970-01-01
    • 2023-03-27
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多