如何一次导入几个隐含的?

时间:2011-12-09 22:35:53

标签: scala

我的应用程序有几个隐式上下文。 喜欢

 import scala.collection.JavaConversions._    
  import HadoopConversion._   
etc

现在我必须复制粘贴每个文件的所有导入。是否可以将它们组合在一个文件中并只进行一次导入?

3 个答案:

答案 0 :(得分:8)

默认情况下,某些库提供的一种很好的技术是将implicits捆绑到一个特征中。这样,您可以通过定义扩展其他隐式捆绑特征的特征来组合implicits集。然后,您可以使用以下内容在scala文件的顶部使用它。

import MyBundleOfImplicits._

或者通过将其混合到您需要的地方来提高选择性。

object Main extends App with MyBundleOfImplicits {
   // ...
}

不幸的是,对于像JavaConversions这样的东西,要使用此方法,您需要重新定义要在特征中使用的所有隐含。

trait JavaConversionsImplicits {
  import java.{lang => jl}
  import java.{util => ju}
  import scala.collection.JavaConversions  
  implicit def asJavaIterable[A](i : Iterable[A]): jl.Iterable[A] = JavaConversions.asJavaIterable(i)
  implicit def asJavaIterator[A](i : Iterator[A]): ju.Iterator[A] = JavaConversions.asJavaIterator(i)
}

trait MyBundleOfImplicits extends JavaConversionsImplicits with OtherImplicits

答案 1 :(得分:3)

Scala没有一流的导入。所以你的问题的答案是否定的。但是scala REPL有一个例外。您可以将所有导入放在一个文件中,然后告诉REPL它所在的位置。请参阅this question

答案 2 :(得分:1)

其他答案/评论已经全面。但是如果你只想减少COPY / PASTE,所有主流的IDE /文本编辑器都支持文本模板(IntelliJ IDEA中的“实时模板”,Eclipse中的“模板”,TextMate中的“片段”......),这肯定会让你的生活更轻松。