scala – 掌握不变的数据结构
发布时间:2020-12-16 09:36:05 所属栏目:安全 来源:网络整理
导读:我正在学习斯卡拉,作为一个好学生,我试图遵守我发现的所有规则。 一个规则是:不可执行! 所以我试图用不可变的数据结构和val来代码一切,有时这很难。 但是今天我想到了自己:唯一重要的是对象/类应该没有可变状态。我不会强制以不可变的方式编写所有方法
我正在学习斯卡拉,作为一个好学生,我试图遵守我发现的所有规则。
一个规则是:不可执行! 所以我试图用不可变的数据结构和val来代码一切,有时这很难。 但是今天我想到了自己:唯一重要的是对象/类应该没有可变状态。我不会强制以不可变的方式编写所有方法,因为这些方法不会相互影响。 我的问题:我是正确还是有任何问题/缺点我看不到? 编辑: aishwarya的代码示例: 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 } 说明:它是一种计算可变顺序的均匀马尔科夫模型的对数似然性的方法。应用的状态方法采用所有先前的符号和即将到来的符号,并返回这样做的概率。 正如你所看到的:整个方法只是乘以一些概率,这将更容易使用vars。 解决方法
规则并不是真正的不变性,而是参照透明度。使用本地声明的可变变量和数组是完全可行的,因为没有任何效果可以观察到整个程序的任何其他部分。
参考透明度(RT)的原则是: 表达式e是透明的,如果对于所有程序p,则每个p中的e的每个出现可以用评估e的结果代替,而不影响p的可观察结果。 请注意,如果e创建并突变某些本地状态,则不会违反RT,因为没有人可以观察到这种情况。 也就是说,我非常怀疑您的实现与vars更为直接。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- scala – “`class declaration head` {val_name:Type =>`
- 使用vs2005 webservice 创建,部署,调用的简单实例
- 暴力破解Telnet服务
- WebService基础教程之三(通过UrlConnection调用WebService
- scala – Akka,SQS和Camel的消费者民意调查
- angular – 何时使用FormGroup与FormArray?
- 什么是unix脚本的最佳lisp /方案?
- 基于Bootstrap3制作响应式布局网站(一)
- scala – 泛型类的子类型的隐式类
- angularjs – 如何获取选择标签的ng模型以获得最初选择的选