Xtalã®å¤å¤
å¤å¤ã®ä»æ§ã段ã ã«ãããªãã¦ãã¾ããã
æã®å¤å¤ã®ä»æ§
以åã®å®è£
ã§ã¯ãå¤å¤ãè¿ãé¢æ°å¼ã³åºãã¯ãå¤é代å
¥ã§ååããªãã¨ãä»ã®å¤ã¯å
¨ã¦åãæ¨ã¦ããã¦ãã¾ããã
é¢æ°å¼ã³åºãã®éããå¼ã³åºãå´ãå¿
è¦ã¨ããæ»ãå¤ã®æ°ãããã£ãã渡ããã¦ãã¦ããã以ä¸ã®å¤ã¯åã«åãæ¨ã¦ãå®è£
ã«ãªã£ã¦ããããã§ãã
foo: fun(){ return 0, 1, 2; } { a: foo(); a.p; //=> 0 } { a, b: foo(); a.p; //=> 0 b.p; //=> 1 }
ããã¯ãå¤å¤ãè¿ããã©ãæåã®æ»ãå¤ã ãã使ãã±ã¼ã¹ãå¤ãé¢æ°ãã§ã¯é½åã®ããä»æ§ã§ããã
ãã以å¤ã§ã¯ç¹ã«é½åã®ããã±ã¼ã¹ã¯ç¡ããé
åã¨å¤å¤ãããã¦æ··åãããå ´åã¯éã«ä¸é½åã¨ãªããã¨ããããã¾ããã
0.9.5.0ãããããã¯ããããæ¢ãã¦æ¬¡ã®ããã«ãã¦ã¾ãã
ä»ã®å¤å¤ã®ä»æ§ã¨ãRubyã®å¤å¤ã®ä»æ§ã®æ¯è¼
ç¾å¨ã®å®è£ ã§ã¯ããå¼ã³åºãå´ãå¿ è¦ã¨ããæ»ãå¤ã®æ°ããããé¢æ°ãè¿ãå¤å¤ãå¤ãå ´åãä½ã£ãé¨åãé åã«çºããããã«ãªã£ã¦ãã¾ãã
values: fun(){ return 0, 1, 2; } // å¤å¤ãè¿ããã¨ã¨ãé åãè¿ããã¨ã¯æå³çã«ã¯çããã®ã§æ¬¡ã®ããã«å®ç¾©ã§ãã // ãã ããå¤å¤ã®æ¹ãç¡é§ãªé åãçæãããªãã®ã§å®è¡å¹çã¯ãã // values: fun(){ return [0, 1, 2]; } { a: values(); a.p; //=> [0, 1, 2] } { a, b: values(); a.p; //=> 0 b.p; //=> [1, 2] } { a, b, c: values(); a.p; //=> 0 b.p; //=> 1 c.p; //=> 2 }
Rubyã§æ¸ãã¨æ¬¡ã®ããã«ãªãã¾ã
def values return 0, 1, 2 # é åã§è¿ãã¦ãåãæåã¨ãªã # return [0, 1, 2] end a = values p a #=> [0, 1, 2] a, *b = values p a #=> 0 p b #=> [1, 2] a, b, c = values p a #=> 0 p b #=> 1 p c #=> 2
Xtalã¯ãå¤é代å
¥ã¨ãããã¯ãã©ã¡ã¼ã¿ã¸ã®ä»£å
¥ã®è¦åã¯ã¾ã£ããåãã¨ãªãã¾ãã
foo: fiber{ yield 0, 1, 2 // é åã§è¿ãã¦ãåã // yield [0, 1, 2]; } foo{ |a| a.p; //=> [0, 1, 2] } foo{ |a, b| a.p; //=> 0 b.p; //=> [1, 2] } foo{ |a, b, c| a.p; //=> 0 b.p; //=> 1 c.p; //=> 2 }
Ruby*1ã¯ãå¤é代å
¥ã¨ãããã¯ãã©ã¡ã¼ã¿ã¸ã®ä»£å
¥ã¯ãç´°ããè¦åãå¤ãããæ··ä¹±ãã¾ã*2ã
def foo yield 0, 1, 2 end foo{ |a| # warning: multiple values for a block parameter (3 for 1) p a #=> [0, 1, 2] } # æããã¾ãããããã¯æ¬¡ã®ããã«æ¸ããªããã°ãªããªãããã§ãã foo{ |*a| p a #=> [0, 1, 2] } # ããããå¤éä»£å ¥ã®å ´åã§ã¯ã*a = values ã¨æ¸ã㨠a 㯠[[0, 1, 2]] ã¨ãªã£ã¦ãã¾ãããã # a = values ã¨æ¸ãå¿ è¦ãããã¾ã # ããã«ãreturnã®å ´åã§ã¯å¤å¤ãè¿ããã¨ã¨ãé åãè¿ããã¨ã§æåã¯å¤ããã¾ããã§ãããã # yieldã¯é åãè¿ãã¨æåãå¤ããã¾ã def foo yield [0, 1, 2] end foo{ |*a| p a #=> [[0, 1, 2]] } # ããã©ã¯æ¬¡ãæ£è§£ foo{ |a| p a #=> [0, 1, 2] }