【Ruby】パーフェクトRuby 学習感想文 ~第9章 その2
10章に行く前に、
9章の中で少し複雑な例があったので、実際に書いて確認しました。
(参考・経緯など)
パーフェクトRuby 学習感想文 ~はじめに
P295
class KeywordArgs def normal_method_allow_keyword_args(ichi, ni, san) [ichi + "dayo", ni + "dayo", san + "dayo"] end private def method_missing(name, *args) method_name = name.to_s + '_allow_keyword_args' p args args_hash = args.first p args_hash new_args = self.method(method_name).parameters.map do |(req, arg_name)| args_hash[arg_name] end __send__ method_name, *new_args end end p KeywordArgs.new.normal_method(san: '1', ichi:'2', ni: '3')
■結果
[{:san=>"1", :ichi=>"2", :ni=>"3"}] {:san=>"1", :ichi=>"2", :ni=>"3"} ["2dayo", "3dayo", "1dayo"]
最初分からなかったのは、可変長引数の*arg.first で何が返ってくるのかという所。
可変長引数は配列で定義されているんだね。
だからfirstメソッドを使ってHash自体を取り出すのか。
あと、__send__メソッドで何をしているのか分からなかったので、
"dayo"をつけて分かりやすくしました。
「処理の最後の実行結果が返ります」というRubyの原則を、まだうっかり忘れてしまう。