有時候,我建立一個類我想有一個reset
功能。例如初始化變量
class DFA(val initialState:State) {
var states = Map[State,State]()
var currentState: State = initialState
reset
def reset {currentState = initialState}
}
糟糕!你的DRY鈴聲響了嗎?我將currentState
設置爲initialState
兩次。一旦在reset
並且一次在構造函數中。我不能讓var
未初始化,否則編譯器會報錯。
當然,我可以
class DFA(val initialState:State) {
var states = Map[State,State]()
var evilNullVariableWeMustNeverUse = null
var currentState: State = evilNullVariableWeMustNeverUse
reset
def reset {currentState = initialState}
}
,但我認爲,這種方法的缺點是顯而易見的。
在這個簡單的例子,它不是那麼糟糕,但如果你有5個變量,或更復雜的邏輯,它變得討厭。
我怎樣才能設計出解決此問題?
你可以用「_」來設置的初始值。另外,爲什麼'重置'一個var?應該是一個def。然後你可以在構造函數中調用它。 – IttayD 2011-05-26 06:11:28
'var reset',這是一個錯字嗎?正如IttayD暗示你可能是指'def reset {...}'。我真的不明白第一個解決方案不是對發生的事情和意圖的最清晰表達。除了它應該是'class DFA(val initialState:State)'或'class DFA(initialState:State)',因爲重置爲可能改變的狀態是沒有意義的。 Kim的答案交易一個'initialState'作爲額外的「重置」。 IttayD仍然提到「初始」3次。這是幹什麼的? – huynhjl 2011-05-26 06:45:39
在我的解決方案中,DFA提到最初只有2次。此外,假設初始計算,而不是一個構造函數的參數,然後復位,就沒有必要將其存儲在類 – IttayD 2011-05-26 07:53:47