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
的实际行为来帮助我吗?
答案 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 nil
与puts nil.to_s
相同,与puts ""
相同(请注意IRB输出中的空行)。
其余的只是在等待新输入之前输出最后执行的行的结果。