Ruby do/end vs braces

后端 未结 3 2039
再見小時候
再見小時候 2020-12-30 00:43

Why does this map expression produce different results depending on whether I use braces or do/end?

a = [1,2,3,4,5]


p a.map { |n|
    n*2
}  
#=> [2,4,6         


        
3条回答
  •  梦谈多话
    2020-12-30 01:24

    That has to do with the difference in associativity of the { character and the do keyword.

    In the first case, the block is interpreted as a block argument to the map function. The result of the map function is the argument to the p function.

    In the second case, the block is interpreted as a block argument to the p function, while the a.map is interpreted as the first argument to the p function. Since a.map evaluates to a, this prints the original array. The block is effectively ignored in this case.

提交回复
热议问题