2017-01-12 5 views
0

Rubyを初めて、オブジェクト指向のプログラミングにもっと一般的です。Ruby:属性が設定されているときに自動的にメソッドを呼び出す

私が欲しいのは、ちょうどthisのRuby翻訳です。つまり、クラスのインスタンスを初期化できるようにしたいし、特定の属性が設定されるとすぐにそれを変換するメソッドを呼び出すことができます。

たとえば、気温属性が設定されている華氏から摂氏に変換したい天気のクラスがあるとします。私がこれを動作させる方法はここにあります。

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

どうすればよいですか?

答えて

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 
+0

私はちょうどそれを実際の状況に翻訳しました。明確にするために、私はattr_writerが何であるかをよく理解していないと思います。私はそれに悩まされる必要があります。 [This](https://www.codecademy.com/en/forum_questions/50f0192b102455349200372d)が役立つと思います。私が達成しようとしていたものの正しい実装を見ていることは間違いありません。 – Katie

+0

モジュール#attr_writerは、属性ライターメソッドを生成するメソッドです。その実装は(おおよそ)次のようになります: 'class Module; def attr_writer(*メソッド)methods.each do |メソッド| define_method(: "#{メソッド} =")do | val | instance_variable_set(: "@#{メソッド}"、val)終了エンドエンド終了 '。 –

関連する問題