Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala编译器如何处理潜在的多重赋值_Scala_Variable Assignment_Immutability - Fatal编程技术网

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段中定义