当前位置:  开发笔记 > 编程语言 > 正文

scala在Option Class中重新分配给val

如何解决《scala在OptionClass中重新分配给val》经验,为你挑选了1个好方法。

我的代码看起来像:

    case class SRecord(trialId: String, private var _max:Int)    {
      def max=_max 
      def max_=(value:Int):Unit=_max=value
     }

然后我将一个函数应用到它上面:

def groupSummaryRecords(it:Iterator[Option[SRecord]],   optionSummary:Option[SRecord]):Option[SRecord] = {
    var max=0;
    var sRecord1 : Option[SRecord] = None 
    var i=0
    while(it.hasNext) {
        var sRecord:Option[SRecord] = it.next();
        if(i==0) {
            sRecord1 = sRecord;
        }
        ..
    }
    sRecord1.max=max; // getting 'reassignment to val' compilation error
    ..
 }

为什么我得到这个编译错误,以及如何解决它?

如果我改为将sRecord和sRecord1实例更改为类型SRecord而不是Option[SRecord]方法签名,那么一切正常.

但在某些情况下,我可能有一个空SRecord,因此使用None/Some.我是Scala的新手,Option/Some如果你问我,使用全部感觉真的很痛苦,我只是想删除所有这些Option废话,并在好的Java中测试'null',至少我的代码会工作??!



1> Shadowlands..:

使用该行,sRecord1.max=max您尝试在a上调用max方法Option[SRecord],而不是SRecord.您想要访问包含的SRecord(如果有的话)并在其上调用方法,这可以使用foreach完成:

sRecord1.foreach(_.max=max)

这是为了:

sRecord1.foreach( srec => srec.max=max )

(实际名称"srec"组成,编译器将分配一些内部名称,但你明白了).如果sRecord1None,这将不会执行任何操作,但如果是Some(srec),则将传入方法执行以对包含的实例进行操作.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有