LoginSignup
0

More than 5 years have passed since last update.

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

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0