rubyのsendメソッドについて
rubyのsend
メソッドは動的にメソッドを呼べるということで、試してみました
class Hoge class << self def say(name, age) if age.empty? puts "my name is #{name}, age is secret" else puts "Hello, #{name}, #{age}" end end def hello puts 'Hello world' end def goodbye puts 'Good bye' end def current_time puts Time.now end end end Hoge.say('mikami', 'now_na_young')→Hello, mikami, now_na_young method = :say Hoge.send(method, 'mikami', 'now_na_young')→Hello, mikami, now_na_young Hoge.send(method, 'mikami', '')→my name is mikami, age is secret method = :hello Hoge.send(method)→Hello world method = :goodbye Hoge.send(method)→Good bye method_list = [:hello, :goodbye, :current_time] Hoge.send(method_list.sample)→ランダムで取得します
sendの動きがどういうものなのか、理解しづらかったですが、実際に試してみるとわかりました。
条件分岐も当然できます。
send(メソッド名, 引数) Hoge.say('mikami', 'now_na_young')→Hello, mikami, now_na_young method = :say Hoge.send(method, 'mikami', 'now_na_young')→Hello, mikami, now_na_young Hoge.send(method, 'mikami', '')→my name is mikami, age is secret
動的の意味がこれですね。
method = :hello Hoge.send(method)→Hello world method = :goodbye Hoge.send(method)→Good bye method_list = [:hello, :goodbye, :current_time] Hoge.send(method_list.sample)→ランダムで取得します
引数で取れるから、リファクタリングに活用できそう。
これがメタプログラミングの特徴みたいですね。
色々できそうなんで、メタプログラミングもどんどん吸収していきたいな。