##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