Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么我不能直接打印reduce/inject的结果_Ruby_Mri - Fatal编程技术网

Ruby 为什么我不能直接打印reduce/inject的结果

Ruby 为什么我不能直接打印reduce/inject的结果,ruby,mri,Ruby,Mri,在ruby解释器中发现了一个有趣的怪癖——至少在MRI 2.4.2中是这样 据我所知,下面的每个代码段都应该打印“123”。如果我试图直接打印reduce的结果,我会得到1:Integer或数组包含的任何类型的NoMethodError:undefined方法,但是如果我先保存结果,然后打印,它就可以正常工作 所以,这个代码被破坏了: puts [1,2,3].reduce('') do |memo, num| memo + num.to_s end 这一准则适用于: temp = [1,

在ruby解释器中发现了一个有趣的怪癖——至少在MRI 2.4.2中是这样

据我所知,下面的每个代码段都应该打印“123”。如果我试图直接打印reduce的结果,我会得到1:Integer或数组包含的任何类型的NoMethodError:undefined方法,但是如果我先保存结果,然后打印,它就可以正常工作

所以,这个代码被破坏了:

puts [1,2,3].reduce('') do |memo, num|
  memo + num.to_s
end
这一准则适用于:

temp = [1,2,3].reduce('') do |memo, num|
  memo + num.to_s
end
puts temp
这些应该完全一样,对吗?这应该作为bug归档吗?我是不是错过了一些基本的东西


我认为它至少应该显示要调用哪个方法。在google中找不到关于没有方法名称的未定义方法的任何信息…

puts调用需要括号。这项工作:

puts([1,2,3].reduce('') do |memo, num|
  memo + num.to_s
end)

通常,您可以避免使用括号,但有时解析器会发现歧义,只会引发错误,就像在第一种情况下一样。

第二个代码段有效吗?我得到零分,不确定这是否是你所期望的。是的。temp被成功设置为“123”,并正常打印,同时返回nil,这就是您看到的吗?Clarity的最新问题这已经被问了很多次了。你是把方块传给puts,而不是注射。谢谢!我想我可以看出,如果puts接受一个块,而reduce在这种情况下不需要一个块,那么它将是多么的模糊。需要明确的是,一般来说,如果函数调用中应该有块,那么总是需要paren?@kennycoc我想是的。