有时候,我建立一个类我想有一个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