Scala с использованием финальной статической переменной - PullRequest
4 голосов
/ 22 марта 2012

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"
}

В основном, как я могу использовать Bar после того, как я import Foo.Bar, мне действительно нужно звонить Foo.Bar каждый раз?

Ответы [ 2 ]

13 голосов
/ 22 марта 2012

Вторичные конструкторы имеют внешнюю область видимости, чтобы вы не делали глупостей, подобных этому:

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

, где вы пытаетесь передать параметр конструктору ... после его создания в конструкторе.

К сожалению, это означает, что import Foo.Bar не входит в область действия этой строки.Вам придется использовать полный путь Foo.Bar.

Для всего в классе , за исключением , дополнительные конструкторы, Foo.Bar, будут находиться в области видимости как Bar.

5 голосов
/ 22 марта 2012

Что если вы просто импортируете за пределы определения класса?

import Foo.Bar

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

object Foo {
  val Bar = "Hello Bar"
}
...