2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?