【发布时间】:2011-12-01 18:07:24
【问题描述】:
我正在学习 scala,作为一名优秀的学生,我努力遵守我发现的所有规则。
一个规则是:不变性!!!
所以我尝试用不可变的数据结构和 val 对所有内容进行编码,有时这真的很难。
但今天我想:唯一重要的是对象/类不应该有可变状态。我不必强制以不可变的方式编写所有方法,因为这些方法不会相互影响。
我的问题:我是正确的还是我没有看到任何问题/缺点?
编辑:
艾西瓦娅的代码示例:
def logLikelihood(seq: Iterator[T]): Double = {
val sequence = seq.toList
val stateSequence = (0 to order).toList.padTo(sequence.length,order)
val seqPos = sequence.zipWithIndex
def probOfSymbAtPos(symb: T, pos: Int) : Double = {
val state = states(stateSequence(pos))
M.log(state( seqPos.map( _._1 ).slice(0, pos).takeRight(order), symb))
}
val probs = seqPos.map( i => probOfSymbAtPos(i._1,i._2) )
probs.sum
}
解释:这是一种计算变阶齐次马尔可夫模型的对数似然的方法。 state 的 apply 方法获取所有先前的符号和即将到来的符号,并返回这样做的概率。
如您所见:整个方法只是将一些概率相乘,使用 var 会更容易。
【问题讨论】:
-
一个数据结构怎么可能没有状态呢?
-
选择的答案是错误的。请参阅答案下的我的cmets。引用透明度甚至不是可交换的。
-
请允许我说一下 Shelby Moore III 的最后一条评论正在激烈讨论中。
标签: scala data-structures functional-programming immutability