2016-02-11 43 views
-3

此代碼的輸出:這是什麼意思,`puts`的返回值是`nil`?

x = puts 'hello' 
puts x 

是:

hello 
hello 

但我預計輸出爲一個helloputs x未返回我預期的值。我認爲puts xputs 'hello'相同。我錯過了什麼?

+0

我無法重現您的輸出。當運行上面的代碼時,第一行('x = puts'hello'')將* hello打印到* stdout *,第二行('puts x')打印出一個空行。 – Stefan

回答

0

在您的示例中,您聲明x的值爲puts 'hello'。在這種情況下x的值是零。在你的irb控制檯中試用它。

x 
=> nil 

如果你試圖呼籲放零,你會得到這樣的輸出

puts nil 
=>    
    nil 

至於爲什麼該方法返回零

puts方法相呼應,前面的參數到控制檯。在這種情況下,nil實際上是返回值。

下面是從文檔

看跌期權(OBJ,...)一些信息→零

將給定對象的ios與IO#打印。在沒有以換行符結束的任何之後寫入記錄分隔符(通常是換行符)。如果使用數組參數調用,則將每個元素寫入新行。如果不帶參數調用,則輸出單個記錄分隔符。

http://ruby-doc.org/core-2.2.2/IO.html#method-i-puts

下面是該方法

if (argc == 0) { 
    rb_io_write(out, rb_default_rs); 
    return Qnil; 
} 

看看最後一行的源代碼。 return Qnil;