Почему global ExecutionContext не является параметром по умолчанию в блоке future?

это действительно раздражает, когда вы пишете очень параллельный код с фьючерсами или ответом актеров, и у вас есть ручной импорт ExecutionContext.Implicits.global. Пытался найти хорошее объяснение, почему он не сделан как параметр по умолчанию, например сделал С Strategy на Scalaz Concurrent. Это было бы очень полезно, чтобы не вставлять/удалять все эти импорта в коде. Или мне не хватает логики?

1 ответов


общая тенденция, по-видимому, требует, чтобы пользователь явно импортировал такие вещи, как имплициты, дополнительные операторы или DSL. Я думаю, что это хорошо, так как это делает вещи менее "волшебными" и более понятными.

но ничто не мешает вам определить неявное значение для всего пакета для вашего кода. Обратите внимание, что если неявный ExecutionContext всегда импортировался по умолчанию, вы не сможете этого сделать.

в объекте пакета:

package object myawsomeconcurrencylibrary {
  implicit def defaultExecutionContext = scala.concurrent.ExecutionContext.global
}

в любом класс в одном пакете:

package myawsomeconcurrencylibrary

object Bla {
  future { ... } // implicit from package object is used unless you explicitly provide your own
}