Ruby times 方法返回值不是块的最后一个表达式的值

EmilyYu · August 23, 2018 · Last by CaiAAA replied at September 14, 2018 · 1574 hits

今天发现了一个有趣的结果,运行 times 方法的时候,返回值并不是块中最后一个表达式的值

比如说,

return_value = 3.times do |i|
  p i
  555
end

运行发现,return_value 的值并不是 555,而是 3

是因为 times 返回值是 self~ 我一直都以为块的返回值都是最后一个表达式😂

times 最后一个表达式的返回值没有意义吧。。。。你需要 map。。

return_value应该是each而不是times的返回结果吧,each 迭代器返回数组或哈希的所有元素。

大兄弟,首先你的代码有问题,times 方法本身就能实现迭代了,为啥还要接个 each 方法?所以你这个问题表述也不对了,整个表达式的结果实际是 each 方法的返回值,而不是 times 的。

其次,api 文档里写的很清楚,无论 times 还是 each,在接了代码块的时候,返回的都是 self。多看 API 啊

Reply to spike76

嗯,each 是手误,哈哈,谢谢指正😋 。其实我就是想说刚发现 times 的返回结果是 self 而不是块的最后一个表达式的值

Reply to pynix

是的,times 返回的是接收者的值

Reply to ice_col

嗯嗯,这里手误,已经改啦😜

多看看 文档

你不说,我都没关注过 times 的返回值 ...........受教了

EmilyYu closed this topic. 15 Sep 10:37
EmilyYu reopened this topic. 15 Sep 10:38
EmilyYu closed this topic. 15 Sep 10:38
You need to Sign in before reply, if you don't have an account, please Sign up first.