В Scala как передать операторы импорта подклассам? - PullRequest
9 голосов
/ 31 августа 2011

Например

object TimeHelpers {
  def seconds(in: Long): Long = in * 1000L
}

import TimeHelpers._

class Base {

  seconds(1000L)
}

// separate file
class Base2 extends Base {
// does not compile
//seconds(1000L)

}

Нужно ли вручную импортировать для Base2 или есть способ сделать это автоматически?

1 Ответ

16 голосов
/ 31 августа 2011

Нет такого механизма, извините.

Однако одна хитрость заключается в использовании наследования признаков, а не импорта. Это может быть полезным способом группировки нескольких импортов. Например,

trait Helpers1 {
  def seconds(in: Long): Long = in * 1000L
}

trait Helpers2 {
  def millis(in: Long): Long = in * 1000000L
}

class Base {
  protected object helpers extends Helpers1 with Helpers2
}

// separate file
class Base2 extends Base {
  // References to helper functions can be qualified:
  helpers.seconds(1000L)
  helpers.millis(1000L)

  // Or, can import multiple helper traits with one line:
  import helpers._
  seconds(1000L)
  millis(1000L)
}

Другая возможность состоит в том, чтобы Base наследовать Helpers1 with Helpers2, но тогда вы, вероятно, захотите, чтобы методы были protected.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...