【问题标题】:What is val at class parameter in Scala?Scala中类参数的val是什么?
【发布时间】:2016-02-26 02:37:57
【问题描述】:

我有时会看到类似下面的内容。

class Test(val str: String){
}

虽然我用val 编写了一些示例代码,但我看不出普通声明和val 的方式有什么区别。

它们之间有什么区别? 什么时候使用?

【问题讨论】:

    标签: scala


    【解决方案1】:

    如果您添加val,您的变量将从课堂外可见。

    // 'name' is a val
    class Person(val name: String)
    val p = new Person("Alvin Alexander")
    p.name                                  // String = Alvin Alexander
    p.name = "Fred Flintstone"              // error: reassignment to val
    
    // 'name' is neither var or val
    class Person(name: String)
    val p = new Person("Alvin Alexander")
    p.name                                  // error: value name is not a member of Person
    

    代码取自http://alvinalexander.com/scala/scala-class-examples-constructors-case-classes-parameters

    更多信息scala class constructor parameters

    【讨论】:

      【解决方案2】:

      通过添加到@EntryLevelDev 的答案,您可以使用javap 来查看实际发生的情况。

      1.scala

      class Test(val str: String){
      }
      

      第 1 步。 scalac 1.scala

      第二步。 javap测试

      从“1.scala”编译

      public class Test {
        public java.lang.String str();
        public Test(java.lang.String);
      }
      

      2.scala:

      class Test2(str: String){
          }
      

      第 1 步。 scalac 2.scala

      第二步。 javap测试2

      从“1.scala”编译

      public class Test1 {
        public Test1(java.lang.String);
      }
      

      所以当你添加 val 时,scala 会通过参数的名称生成一个方法,并公开,以便从外部可见。

      【讨论】:

      • 我很喜欢这个解释!
      猜你喜欢
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2015-12-30
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多