Hatena::Grouprubyist

うんたらかんたらRuby RSSフィード

2009-03-07メソッドの戻り値って複数可能?

メソッドの戻り値って複数可能?

| メソッドの戻り値って複数可能? - うんたらかんたらRuby を含むブックマーク はてなブックマーク - メソッドの戻り値って複数可能? - うんたらかんたらRuby

コードリーディングを始めよう - @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"

コードリーディングについて

人の書いたソースは、読みたいんだけど

量が多いとどっから読めばいいか躊躇してしまう。


こういう解説があると敷居を下げて、間口を広げてくれる感じがして

読みやすかった。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20090307