Scala辅助构造函数参数可见性

时间:2014-01-03 17:20:43

标签: scala intellij-idea case-class

我刚注意到,当我有

case class Foo(bar : String)(val baz : String) 

如果在不同的包中引用Foo,我似乎无法访问baz。有没有什么可以做到这一点,或者我只需要让步并添加一个访问者?

2 个答案:

答案 0 :(得分:1)

这就是REPL的用途!

scala> case class Foo(bar: String)(val baz: String)
defined class Foo

scala> val foo1 = Foo("goo")("snoo")
foo1: Foo = Foo(goo)

scala> foo1.baz
res0: String = snoo

但请注意,baz此处不参与copy equalshashCodetoString(如上所示),因此请使用其他案例小心构造函数参数列表。

此外,这不是“辅助构造函数”。

<强>证明

package here {
  case class Foo(bar: String)(val baz: String)
}

package there {
  import here._

  object SnooSnoo {
    def main(args: Array[String]): Unit = {
      val foo2 = Foo("flew")("too")

      println(s"foo2=$foo2; foo2.baz=${foo2.baz}")
    }
  }
}

% sbt
> run
[info] Compiling 1 Scala source to /Users/rschulz/Projects/scribble/target/scala-2.10/classes...
[info] foo2=Foo(flew); foo2.baz=too
[success] Total time: 5 s, completed Jan 4, 2014 2:07:14 PM

答案 1 :(得分:0)

实际上,看起来这可能只是IntelliJ Scala插件中的一个错误。