2013-01-14 46 views
1

我对Ruby中的返回值感到困惑。例如,如果我这样做Ruby的返回值

(1..5).each {|i| puts 2*i} 

返回

=> 1..5 

我只是不知道为什么会发生。它有时似乎返回多个变量?

+0

为什么要使用该代码的返回值? –

+0

'1..5'是一个单独的范围对象。 – sawa

回答

6

ruby​​中的所有内容都是表达式*表达式有一个值。 each评估它迭代的对象。在这种情况下,它是一个Range对象。

看一看definition of Array#each

   VALUE 
rb_ary_each(VALUE array) 
{ 
    long i; 
    volatile VALUE ary = array; 

    RETURN_ENUMERATOR(ary, 0, 0); 
    for (i=0; i<RARRAY_LEN(ary); i++) { 
     rb_yield(RARRAY_PTR(ary)[i]); 
    } 
    return ary; 
} 

对于输入阵列中的每个元件,它调用块,然后返回输入数组。

* 从我的头顶开始,我无法用红宝石命名这不是一个表达式。

+0

不应该返回最后一个表达式吗?所以它应该是计算的最后一个数字,但它为什么会返回整个范围呢? – OneZero

+0

@ user1229490:查看更新的答案。 –

+2

@ user1229490 - 'each'是一个循环结构。它意味着在循环中执行操作,而不是返回值。如果你想从循环内部返回一些东西,那么你可以使用'map'或其他类型的操作。 – Casper