Как импортировать сразу несколько неявных? - PullRequest
6 голосов
/ 10 декабря 2011

У меня есть несколько неявных контекстов для моего приложения. как

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

Прямо сейчас мне нужно скопировать и вставить все эти импорта в каждый файл. Можно ли объединить их в один файл и выполнить только один импорт?

Ответы [ 3 ]

8 голосов
/ 10 декабря 2011

Хорошая методика, которую некоторые библиотеки предоставляют по умолчанию, заключается в объединении последствий в черту.Таким образом, вы можете составлять наборы имплицитов, определяя черту, которая расширяет другие неявные черты связывания.И затем вы можете использовать его в верхней части вашего файла scala со следующим:

import 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
3 голосов
/ 10 декабря 2011

Scala не имеет первоклассного импорта. Так что ответ на ваш вопрос - нет. Но есть исключение для scala REPL. Вы можете поместить все свои импортные файлы в файл, а затем просто сообщить REPL, где он находится. См этот вопрос .

1 голос
/ 10 декабря 2011

Другие ответы / комментарии уже являются исчерпывающими.Но если вы просто хотите уменьшить COPY / PASTEs, все основные IDE / текстовые редакторы поддерживают шаблоны текста («живой шаблон» в IntelliJ IDEA, «шаблон» в Eclipse, «фрагменты» в TextMate ...), которые определенно сделают вашжизнь легче.

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