“puts”语句如何在Ruby中起作用?

时间:2013-02-15 16:33:37

标签: ruby ruby-1.9.3

我知道put总是单独返回nil

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

>> 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?

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

4 个答案:

答案 0 :(得分:2)

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

考虑一下:

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

puts仍在返回nil,但是repl显示的是最后一个语句5

的结果

答案 1 :(得分:2)

这与看跌期权无关。

分号分隔多个表达式。在这种情况下,irb仅显示最后一个表达式的评估结果。

答案 2 :(得分:1)

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

想想这个例子:

irb(main):001:0> "first";"second"
=> "second"

答案 3 :(得分:1)

puts调用to_s关于它的论点,这就是puts 1有效的原因。 puts nilputs nil.to_s相同,与puts ""相同(请注意IRB输出中的空行)。

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