Ruby
RubyOnRails

メタプログラミングruby 3章 まとめ

symbolは慣習で用いている

symbolは名前を呼びたい時の物、イメージとしては人間がプログラムを書くとき手打ちで名前をつける言語要素を呼ぶときに使う
symbolは名前が変わらないものに用いる場合が多い hashのキー メソッド名

send

sendの引数としてメソッド名を入れることによって、privateメソッドだろうがなんでも呼び出せてしまう。

ゴーストメソッド

普通はmethodがなかった場合にはmethod missingというメソッドが呼ばれて、それ用にメッセージが表示される。
このmethod missingというメソッドをclass内で定義することによって、定義されていないmethodが呼ばれた際に動的にメソッドを生成するなどの処理を行うことができる。

動的メソッドと動的ディスパッチ

sample.rb
class Computer
  def initialize(computer_id, data_source)
    @id = computer_id
    @data_source = data_source
    data_source.method.grep('/^get_(.*)_info$/){Computer.define_component $1}
  end

  def self.define_component(name)
    define_method(name) do
      info = @data_source.send "get_#{name}_info", @id
      price = @data_source.send "get_#{name}_price", @id
      result = "#{nane.capitalize}: #{info} ($#{price})", @id
      result
    end
  end
end