Мой код выглядит так:
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]
, а также подпись метода, все это работает отлично однако.
Но в некоторых случаях у меня может быть null SRecord
, поэтому я использую None/Some
. Я новичок в Scala, использование Option/Some
повсюду кажется настоящей болью, если вы спросите меня, я просто думаю об удалении всей этой Option
ерунды и тестировании на «null» в старой доброй Java, по крайней мере, мой код будет работать ?? !
==
сравнения, которые игнорируют изменяемые биты. - person Rob Starling   schedule 18.12.2015case class A(x: Int, y: Int) { var _z: Int = 0; def z=_z; def z_=(z: Int):Unit=_z=z };
,val a=A(1,2)
иval b=A(1,2)
, тогдаa==b
будетtrue
, даже если вы измените один из ихz
, напримерa.z=7
. - person Rob Starling   schedule 18.12.2015struct
, вы, вероятно, просто захотитеclass B(var x: Int, var y: Int);
- person Rob Starling   schedule 18.12.2015