0

我知道这总是让 returnnil本身。

但是我已经知道这个事实,我已经开始玩弄它了。这里是:

>> puts

=> nil # Good, you are doing what I expected.

>> puts 15
15
=> nil # nil is for puts and 15 it printed,as it is assigned to do. perfect still.

>> puts a = 5 + 2
7
=> nil # still good.

现在我会做更多的事情puts来看看它有多强大。

>> puts a= 5 + 2;b= 2+3
7
=> 5 #ahh! where is nil?

>> puts a= 5 + 2;b= 2+3;c= 4+8
7
=> 12 # again no nil. Another confusion created here that why 12 and 7 only, how 5 has been skipped?

价值如何puts nil被压制?

好的,让我们测试另一种方式nil

>> x=puts a= 5 + 2;b= 2+3;c= 4+8
7
=> 12

>> puts x

=> nil # humm, nil is there. but why not nil => nil? Confusion here again goes up. whose nil is it?

puts任何人都可以通过说出Ruby世界中的实际行为来帮助我吗?

4

4 回答 4

2

我假设replirb正在评估您输入的语句并显示最后评估的语句的值。

考虑一下:

>> p = puts "hello"; 5
hello
 => 5 
>> p
 => nil 

puts仍在返回nil,但 repl 正在显示最后一条语句的结果,5

于 2013-02-15T16:37:32.370 回答
2

这与puts没有太大关系。

分号分隔多个表达式。irb在这种情况下,将只显示最后一个表达式的计算结果。

于 2013-02-15T16:37:57.787 回答
1

您的问题不在于puts,而是提示符对包含多个语句(以分号分隔)的命令的作用。

想想这个例子:

irb(main):001:0> "first";"second"
=> "second"
于 2013-02-15T16:40:54.140 回答
1

puts呼吁to_s它的论点,这就是为什么puts 1有效。puts nil与 相同puts nil.to_s,也与puts ""(注意 IRB 输出中的空白行)相同。

其余的只是 irb 在等待新输入之前输出最后执行的行的结果。

于 2013-02-15T16:48:25.990 回答