我知道以下遞回示例可以正常作業minus(start - 1)。但是我試圖理解為什么添加一個puts輸出 和p輸出nil。
如果我的理解是正確的,則遞回從最后一個堆疊幀推送開始,計算結果為 2,然后是 1,然后是 0。這是否與輸出沒有確定值的運算式有關?
def minus(start)
puts start
if start > 0
puts minus(start - 1)
end
end
minus(3)
3
2
1
0
uj5u.com熱心網友回復:
這是因為如何puts和p作業。
當我們使用puts它時to_s從物件呼叫。
當我們使用p它時inspect從物件呼叫。
與nil:
nil.to_s # ''
nil.inspect # 'nil'
puts nil # It will use to_s and the result will be ''
p nil # It will use inspect and the result will be 'nil'
uj5u.com熱心網友回復:
如果returnRuby 中沒有顯式,則方法回傳該方法中最后一個運算式回傳的值。
運算式的回傳值minus(start - 1)將是該minus方法回傳的任何值。
但是 的回傳值puts minus(start - 1)總是nil因為這puts是指定方法的方式。來自檔案的參考:
puts(obj, ...)→`零`將給定的物件寫入ios。在任何尚未以換行序列結尾的內容之后寫入換行符。回傳
nil。
這就是說,因為所有的遞回呼叫的回傳值minus是nil 在你的例子這個nil輸出。和-作為rowend已經解釋- puts nil電話to_s上nil,因此輸出空字串。而p呼叫inspect的nil,因此輸出nil。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365670.html
上一篇:rails不呈現視圖
