在Scala中,如何将import语句传递给子类?

时间:2011-08-31 03:05:03

标签: scala

例如

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 个答案:

答案 0 :(得分:16)

没有这样的机制,对不起。

但是,一个技巧是使用特征继承而不是导入。这可以是对多个导入进行分组的有用方法。例如,

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