Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何一次导入多个隐式?_Scala - Fatal编程技术网

Scala 如何一次导入多个隐式?

Scala 如何一次导入多个隐式?,scala,Scala,我的应用程序有几个隐式上下文。 像 现在我必须复制粘贴每个文件中的所有导入。是否可以将它们合并到一个文件中,只进行一次导入?Scala没有一流的导入。因此,您的问题的答案是否定的。但是scala REPL有一个例外。您可以将所有导入放在一个文件中,然后告诉REPL它位于何处。请参阅。一些库默认提供的一种好技术是将隐式绑定到trait中。通过这种方式,您可以通过定义扩展其他隐式绑定特性的特性来组合隐式特性集。然后,您可以在scala文件的顶部使用它,如下所示 import MyBundleOfIm

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


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

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

一些库默认提供的一种好技术是将隐式绑定到trait中。通过这种方式,您可以通过定义扩展其他隐式绑定特性的特性来组合隐式特性集。然后,您可以在scala文件的顶部使用它,如下所示

import MyBundleOfImplicits._
或者更具选择性,只在你需要的地方混合

object Main extends App with MyBundleOfImplicits {
   // ...
}
不幸的是,对于JavaConversions之类的东西,要使用这个方法,您需要重新定义您想要在trait中使用的所有隐式

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

其他答案/评论已经很全面了。但是,如果您只是想减少复制/粘贴,所有主流IDE/文本编辑器都支持文本模板(IntelliJ IDEA中的“live template”,Eclipse中的“template”,TextMate中的“snippets”),这肯定会让您的生活更轻松。

我认为有/曾经有过“导出”导入的建议,但我不确定其状态是什么。对象(不是包)可以以类似的方式使用(例如根据Scalaz):和“导出/包含”上的旧线程:
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