scala - Scala 构造函数中有局部值/变量吗?

标签 scala constructor

在Java中,我将类字段理解为可以从类中的整个位置访问的变量,并且描述实例的状态结构。在Java中,字段是在任何方法之外定义的(这是唯一可以在方法之外的东西)。

在 Scala 中,“任何方法之外”是主构造函数 - 换句话说:不存在“任何方法之外”。因此字段是在主构造函数中定义的。因此,构造函数中的任何变量/值都是一个字段。甚至给予构造函数的参数也自动成为类字段,而不是像 Java 中的局部构造函数变量。

如果我猜对了:Scala 构造函数中有局部变量/值吗?

如果不是:为什么决定不需要这样的东西?

澄清:我询问的是概念,而不是具体案例。另外,我询问如何解决获得局部变量之类的问题(尽管如果答案是没有,我将不胜感激)。

最佳答案

整个类主体是“构造函数”。

您始终可以使用一对大括号将任何变量的范围限制为您喜欢的小值,因此没有理由引入额外的“概念”,它没有特定的用途。奥卡姆 Razor 。

  class Foo(bar: String) { // constructor parameter
    val baz = "baz";  // class member
    {
      val bat = "bat" // "local" variable
      println(bar + baz + bat) // all three are visible
    }
    println(bar + baz) // only first two are accessble
  }
  println (new Foo("bar").baz) // only class member can be accessed here

关于scala - Scala 构造函数中有局部值/变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39855159/

相关文章:

json - Play : How to implement vermongo with ReactiveMongo

for循环中的Scala类型不匹配错误

java - 类的构造函数

c# - 创建参数化通用对象的实例,并将所有参数设置为 null

c++ - 避免在构造函数中分配或保持简单性(和 RAII?)

scala - 理解 Scala 中的案例类和特征

java - Scala 枚举可以像 Java 一样映射到整数吗?

scala - 我什么时候应该(或者不应该)使用 Scala 的 @inline 注释?

c++ - 特殊化构造函数,需要可能的引用类型

c++ - 在 C++ 类中内联一组非默认可构造对象