コードリーディングを始めよう − @IT
を参考に、skipのコードを眺めてたら
メソッドの戻り値が複数あるやん。
へぇ〜、こんなんできるんか。
確認してみた
irb(main):027:0* def ret2 irb(main):028:1> return "r1","r2" irb(main):029:1> end => nil irb(main):030:0> irb(main):031:0* a = ret2 => ["r1", "r2"] irb(main):032:0> a.class => Array irb(main):033:0> irb(main):034:0* x,y = ret2 => ["r1", "r2"] irb(main):035:0> x.class => String irb(main):036:0> y.class => String irb(main):037:0> x => "r1" irb(main):038:0> y => "r2"
なるほど、通常は配列で返ってくるのを
個別にセットできるのかぁ。
これは何かいいな。使えそう。
ちなみに
受け側が配列の要素数より多い場合は
nilとなる。エラーにしない。
irb(main):037:0> x,y,z = ret2 => ["r1", "r2"] irb(main):038:0> x.class => String irb(main):039:0> y.class => String irb(main):040:0> z.class => NilClass irb(main):041:0> x => "r1" irb(main):042:0> y => "r2" irb(main):043:0> z => nil
おまけに
受け側より要素数が多い場合もエラーにしない。
irb(main):044:0> def ret3 irb(main):045:1> return "r1","r2","r3" irb(main):046:1> end => nil irb(main):047:0> x,y = ret3 => ["r1", "r2", "r3"] irb(main):048:0> x.class => String irb(main):049:0> y.class => String irb(main):050:0> x => "r1" irb(main):051:0> y => "r2"
コードリーディングについて
人の書いたソースは、読みたいんだけど
量が多いとどっから読めばいいか躊躇してしまう。
こういう解説があると敷居を下げて、間口を広げてくれる感じがして
読みやすかった。