2012-01-11 16 views
1

在有限的意義上,你自己編寫outref類很容易,但我的問題不是如何去做 - 但是否有一些功能(或類)可以使用?在Scala中模擬C#和參考 - 準備使用功能?

我發現的最接近的東西是Reference特徵(但它是一個特徵)。

我需要那些,而不是元組,不是選項,而不是純粹的結果,因爲只有ref/out使鏈接優雅。

+5

您能否提供一些示例代碼來說明您正試圖存檔哪個鏈接?也許對另一個問題的答案有幫助:http://stackoverflow.com/questions/6896118/basic-scala-oop-question-pass-by-reference – 2012-01-11 21:47:46

+0

最簡單的例子是'if(foo(ref/out bar))返回酒吧'。非常感謝您的鏈接,我不認爲我會使用setter,而是封裝,但無論如何,這是有趣的一塊。 +1 – greenoldman 2012-01-12 06:15:53

回答

5

不,Scala支持按值或按名稱傳遞參數。通過引用傳遞參數實際上很難在JVM中正確完成,這可能是流行的JVM語言沒有它的原因之一。此外,out和ref參數鼓勵通過副作用進行編程,Scala設計時嘗試儘可能避免。

至於if的鏈接,有很多方法可以達到類似於Scala中的效果。 「匹配」表達式是最明顯的,你也可以使用Option或Either來研究單調組合。

+0

嗯,「匹配」?你會如何使用它來模擬ref/out? – greenoldman 2012-01-12 06:24:44

+0

它不會直接模仿ref或out,而是允許一個構造既可以測試一個條件,也可以綁定一個或多個變量。我假設你正試圖進行條件檢查,這些條件檢查也會在條件正文中使用適當的變量,假設條件已通過。這種解構測試是模式匹配的最佳選擇。要在模式匹配中包含任意邏輯,請查看gaurds(對於簡單情況)或提取器(對於全功率)。 – 2012-01-12 13:51:04