我将展示的是一个充满乐趣的功能,但它只是以简单的方式解释我的问题。如果我在这个函数中解决了问题,我也解决了原代码中的问题。
问题很简单,可能也是解决方案,但我是Ruby的新手并且有这个疑问。我想打印范围内的值:
def test
(0...5).each do |i|
puts i
end
end
当我调用该函数时,我想要的结果是
0
1
2
3
4
但我得到的结果是
0
1
2
3
4
0...5
为什么这个0...5
一起打印?我怎么能避免这种情况?
答案 0 :(得分:4)
我不认为0..5
是puts
调用的一部分。相反,当你在REPL(irb,pry,rails console等)中调用它时,你会看到它,因为它是代码中最后返回的值。
让我举个例子。
假设我保存了一个名为test.rb
的文件,其中包含以下内容:
1.upto(5).each { |i| puts i }
如果我拨打ruby test.rb
,我会看到预期的输出
0
1
2
3
4
如果我打开irb并运行require("./test.rb")
,我会看到相同的输出。
只有当我将代码粘贴到irb中时,才能看到附加输出(=> 0...5
)。所以我会忽略这一点。
答案 1 :(得分:2)
每当在IRB
个会话中执行任何表达式时,它也会打印每个执行的表达式返回的值。
在方法定义的情况下,它返回刚刚定义的method_name
。
> def my_method
?> puts 'this is my method'
?> end
=> :my_method
您看,:my_method
已打印
当调用方法时,它应该打印方法执行返回的值,即方法中最后一个表达式的响应,即puts
> my_method
this is my method
=> nil
但它打印nil
,因为puts
always returns nil
。我之所以提到这一点,是因为通常开发人员在看到他们的方法意外返回nil
时会感到惊讶。