为什么我的所有puts输出都是=>nil?

9

我知道这可能看起来像一个非常简单的问题,但是我的puts语句不断地生成“=> nil”,我已经搜索了答案,但是找不到。谢谢。

puts 'blink ' *4 blink blink blink blink => nil

注:该段代码输出字符串"blink "连续四次,并在最后打印"=> nil"。
3个回答

9
因为这是puts的返回值:

puts(obj, ...) → nil

像IO#print一样将给定的对象写入到ios中。 在没有换行符序列结束的任何情况下,都会写入记录分隔符(通常是换行符)。 如果使用数组参数调用,则将每个元素写入新行。如果不带参数调用,则输出单个记录分隔符。

源代码: http://www.ruby-doc.org/core-1.9.3/IO.html#method-i-puts 此外,我假设这只是在irb中?因为在普通应用程序中调用puts不会显示其返回值。

2
我想补充一点,Ruby 中的每个指令都会返回某些内容。每个方法、属性、声明(类、方法)都是如此。在 irb 中,你看到的就是返回值(或评估结果)。因此,那些没有意义返回任何内容的方法只会返回 nil。 - Ismael
谢谢。这对我非常有帮助。你说得对,我正在使用irb。我感觉在普通应用程序中编程会更好。我是新手,你能详细解释一下吗? - Matt Perejda
1
在编程中使用 irb 是可以的,我只是想指出,在任何不在 irb 中的 Ruby 程序中,除非你专门检查返回值,否则它不会向你显示。 - Hunter McMillen

7
你可以使用p而不是puts。 p会打印并返回值。

3
Hunter McMillen的回答是正确的。 然而,如果你想要一个替代puts并且实际上返回非nil值的方法,我创建了一个叫做reputs的宝石。
reputs 'blink ' *4
blink blink blink blink
=> "blink blink blink blink "

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接