2013-03-09 66 views
7

我的經驗是基於C的語言(C,C++,Java,C#),其中函數的返回類型可以是無效的,即不返回。但在Ruby中,似乎每個函數都返回一些東西。我想知道在Ruby中返回哪種方法不會返回任何Java或C++中的內容。我最好的猜測可能是零或包含該方法的對象(用於鏈接),或者只是忽略最後發生的任何事情,但我似乎無法找到關於此的任何信息。Ruby替代void返回類型

在Ruby中有什麼替代void?

回答

9

return nil 

在最後的陳述中的方法。

或者乾脆

nil 
+2

空函數('def foo; end')也隱式返回'nil'。 – 2013-03-09 09:42:50

+0

@Zoidberg這是真的,但任何實際用途? – texasbruce 2013-03-09 18:57:32

+0

那麼,爲了保持一致,我會從返回「void」的函數返回'nil'。 – 2013-03-09 19:30:03

0

如果你想返回什麼,是的,你可以使用回零。但爲什麼?

通過不分配函數調用一個變量,你可以幸福地忘記了什麼已經返回。該返回的值將被存儲在任何地方並且將在垃圾回收中丟失。

+11

如果您至少不想考慮方法中最後一個表達式的評估結果,您可能會意外泄漏關於方法和人們可能會開始依賴於此,即使您的文檔中另有說明。 – 2013-03-09 12:27:29

0

nil與void不一樣。您可以將變量設置爲零,但不能將其設置爲無效。如果一個函數返回nil,它可以被分配給一個沒有錯誤的變量,但是可以用一個void函數(在java或者某種支持void函數的語言中)嘗試這個函數,並且編譯器會吠叫。我不是一個紅寶石超級專家,但我沒有發現沒有任何跡象表明void支持這個概念。所有函數都返回一些東西,即使它是零。如果這是不正確的,我希望有更多的紅寶石知識的人可以提供一個反例。

一個變量,特別是在ruby中的所有東西都是對象的地方,是一個具有名稱和地址的變量,用於存儲指向堆上某個對象的地址。將變量設置爲nil意味着將其指針設置爲NilClass的唯一實例。 (true和false是相似的;有TrueClass和FalseClass的單​​個實例。)

我意識到C有一個叫void的指針。這是「void」一詞的完全不同的用法。一個void指針實際上包含一個地址並指向某個東西。現在讓我們忽略這些;我只是提到他們要阻止無情的反擊。我們專注於函數在紅寶石字面上返回沒有,根據我可以告訴它不存在。