Scala编译器如何处理潜在的多重赋值
Scala编译器如何处理潜在的多重赋值,scala,variable-assignment,immutability,Scala,Variable Assignment,Immutability,val-Scala中的变量应具有以下属性,并在编译过程中确保,而不是在以后的运行时: 不可变变量在分配给(绑定)之前不能使用(在“读取”中) 不可变变量赋值一次后不能再赋值 根据教程和文档,只要指定了类型,就不需要立即在声明点分配val 但这似乎造成了一个漏洞 def fn1(x: Int, y: Int): Int = { val const2 : Int const2 = 0 if (x < 10) const2 = x if (y > 10) cons
val
-Scala中的变量应具有以下属性,并在编译过程中确保,而不是在以后的运行时:
val
def fn1(x: Int, y: Int): Int = {
val const2 : Int
const2 = 0
if (x < 10) const2 = x
if (y > 10) const2 = y
const2
}
def fn2(x: Int, y: Int): Int = {
val const2 : Int
var i: Int
for( i <- x to y ){
const2 = 0
}
const2
}
def fn1(x:Int,y:Int):Int={
val const2:Int
常数2=0
如果(x<10)常数2=x
如果(y>10)常数2=y
常数2
}
def fn2(x:Int,y:Int):Int={
val const2:Int
变量i:Int
对于(i这是非法的:
val const2 : Int
const2 = 0
val
s不能在声明后重新分配,句号。如果您添加类成员身份,则可以声明未定义的成员。但即使如此,我认为我们也无法创建OP.@SarveshKumarSingh提供的场景。您可以声明它们,但在声明后无法重新分配它们。cons2
w的值是多少如果没有在第二行中完成的赋值,您能否引用声明之外的赋值是被禁止的,哪怕只有一次?@Arioch'the您只能在一个类中有未定义的声明成员,但问题是编译器会强迫您将该类声明为抽象。“声明之外的赋值”没有在第4章中描述,因为它不是一个声明或定义。它在6.15中定义,赋值没有定义,因此它是不合法的。给定的示例将不会在Scala中编译。Pattern2在第8.1段中定义