【Ruby】可変長引数と配列の展開
はじめに
せっかく調べたのに忘れてしまうため、メモを残しておく。
今回は、メソッドの引数に関することで
可変長引数
と配列の展開
を調べました。
環境
前提条件
- irbかPryが動作すること
やり方
可変長引数
実行
[12] pry(main)> # 引数を元にメッセージを表示する [13] pry(main)> def display_messages(name, *messages) [13] pry(main)* messages.each do |message| [13] pry(main)* p "#{name} : #{message}" [13] pry(main)* end [13] pry(main)* end => :display_messages [14] pry(main)> [15] pry(main)> # 実行 [16] pry(main)> display_messages 'John', 'Hello', 'Goodbye', 'Thank you' "John : Hello" "John : Goodbye" "John : Thank you" => ["Hello", "Goodbye", "Thank you"] [17] pry(main)>
値を個別に渡していますが、2つ目以降は配列として受け取られているのがわかります。
可変長引数
実行
[39] pry(main)> # 引数を元にメッセージを表示する [40] pry(main)> def display_messages(name, message_first, message_second) [40] pry(main)* p "#{name} : #{message_first}" [40] pry(main)* p "#{name} : #{message_second}" [40] pry(main)* end => :display_messages [41] pry(main)> [42] pry(main)> # 実行(正常動作) [43] pry(main)> messages = %w(Hello Goodbye) => ["Hello", "Goodbye"] [44] pry(main)> display_messages 'John', *messages "John : Hello" "John : Goodbye" => "John : Goodbye" [45] pry(main)> [46] pry(main)> # 実行(例外発生) [47] pry(main)> # 受取先のメソッドの引数以上に渡した場合、エラーとなる [48] pry(main)> messages.push 'Thank you' => ["Hello", "Goodbye", "Thank you"] [49] pry(main)> display_messages 'John', *messages ArgumentError: wrong number of arguments (given 4, expected 3) from (pry):50:in `display_messages' [50] pry(main)>
まとめ
最初見た時は「なんだこれ?」と思いましたが、コーディング量が減るのはいいことで
使えるところには積極的に使っていきたいです。
ただ、変数名などをちゃんとしないと変に勘違いする可能性もあるかな?と思ったので
要注意のものだと感じられ巻いた。
参考資料
- 作者: Rubyサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2017/05/17
- メディア: 大型本
- この商品を含むブログ (1件) を見る