nobody
nobody

Reputation: 2759

Scala using final static variable


class Foo(bar: String) {
  import Foo.Bar
  def this() = this(Bar) // this line fails, it seems I can only do
                         // def this() = this(Foo.Bar)  
}

object Foo {
  val Bar = "Hello Bar"
}

Basically, how do I use Bar after I import Foo.Bar, do I really have to call Foo.Bar every single time?

Upvotes: 4

Views: 785

Answers (2)

Rex Kerr
Rex Kerr

Reputation: 167891

Secondary constructors have outer scope to prevent you doing something silly like this:

class Silly(foo: String) {
  val bar = 123
  def this() = this(bar.toString)
}

where you try to pass a parameter to the constructor...after creating it in the constructor.

Unfortunately, this means that import Foo.Bar is not in scope for that line. You'll have to use the full path Foo.Bar.

For everything in the class except the additional constructors, Foo.Bar will be in scope as Bar.

Upvotes: 13

dhg
dhg

Reputation: 52681

What if you just import outside the class definition?

import Foo.Bar

class Foo(bar: String) {
  def this() = this(Bar)
}

object Foo {
  val Bar = "Hello Bar"
}

Upvotes: 5

Related Questions