代码之家  ›  专栏  ›  技术社区  ›  Wickoo

Scala变量解析:类与局部变量

  •  3
  • Wickoo  · 技术社区  · 3 月前

    为什么我在这段代码中遇到错误:

    class A {
      val x = 0
    
      def foo(): Unit = {
        println(x) // Error: x is a forward reference extending over the definition of x
        val x = 0
        println(x)
      }
    }
    
    

    为什么不呢 x 在第一 println(x) 解决x类问题?局部变量是否在整个局部范围内被提升?

    1 回复  |  直到 3 月前
        1
  •  2
  •   Seth Tisue    3 月前

    SLS(Scala语言规范)表示 https://scala-lang.org/files/archive/spec/3.4/04-basic-definitions.html ,

    定义引入的名称的范围是包含定义的整个语句序列。然而,区块中的正向引用存在限制[…]

    所以这似乎按设计工作,但我不清楚 为什么? 它是这样指定的。为什么是“整个语句序列”而不是“以下语句”?