为什么"for/comprehension"表达式的数值类型的desugaring和隐式转换与(!)赋值操作相比不一致?
我相信对此有很多一般性的观点,但我无法找出当前行为的简明和合理的解释.[参考:"Scala for/comprehension的行为......" ]为了正确起见,下面的所有翻译都是使用scala编译器生成的("scalac -Xprint:typer -e")
例如,在隐式数字赋值转换期间,Destination类型占主导地位:
来源:var l:Long = 0
结果:val l: Long = 0L
来源:var l:Long = 0.toInt
结果:var l: Long = 0.toInt.toLong
在"for/comprehension"表达式的隐式转换期间,Source类型占主导地位:
来源:for (i:Long <- 0 to 1000000000L) { }
结果:0.to(1000000000L).foreach(((i: Long) => ()))
来源:for (i <- 0L to 1000000000L) { }
结果:scala.this.Predef.longWrapper(0L).to(1000000000L).foreach[Unit](((i: Long) => ()))
numerical types scala list-comprehension implicit-conversion