2011-10-10 59 views
1

例如,假設我有在斯卡拉,是否有任何機制繼承本地方法變量?

class Parent { 

    def method() { 
     var myvar = "test" 
    } 

} 

是否有子類中訪問MYVAR任何機制?

編輯:

我試圖建立在現有的語言建模的DSL。這種語言具有的功能,如

onTrade { 
    if (price == ...) // will compile 
} 

onDayStart { 
    if (price == ...) // will not compile 
} 

這是因爲如果價格是一個全局變量,但也有編譯時檢查,以確保它只是在正確的上下文中使用。我想一種方法來模擬這將是有局部變量,可以在子類中重寫。喜歡的東西

// Parent 
onTrade { 
    var price = ... 
} 

// Child 
onTrade { 
    if (price == ...) 
    if (somethingelse == ...) // will not compile 
} 
+5

哇!爲什麼會有?這聽起來像一個*糟糕的*功能! –

+3

告訴我們你想做什麼。我們會告訴你如何以Scala的方式來做到這一點。 – missingfaktor

回答

3

您的問題可能的解決方法(雖然我不明白的方式來擺脫new):

// parent 
var onTrades = List[OnTrade]() 
class OnTrade { 
    var price = ... 
    ... 
    onTrades = this :: onTrades 
} 

// child 
new OnTrade { 
    if (price == ...) {...} // subclass constructor, will call OnTrade constructor first 
} 
9

不是真的。這是你的範圍。如果你想讓它在不同層次上可見,你應該改變變量本身的範圍。

例如,如果您想要在類級別定義它,可以通過這種方式進行分享。如果局部變量實際上不是本地的,那麼局部變量就不是本地變量。

範圍是嵌套的,從最廣泛到最本地。 Chapter 2, pg. 16 of the Scala Language Reference涵蓋了「標識符,名稱和範圍」,更詳細地解釋了這一點。