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

EmilyYu · 2018年08月23日 · 最后由 CaiAAA 回复于 2018年09月14日 · 1584 次阅读

今天发现了一个有趣的结果,运行 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 啊

spike76 回复

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

pynix 回复

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

ice_col 回复

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

多看看 文档

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

EmilyYu 关闭了讨论。 09月15日 10:37
EmilyYu 重新开启了讨论。 09月15日 10:38
EmilyYu 关闭了讨论。 09月15日 10:38
需要 登录 后方可回复, 如果你还没有账号请 注册新账号