当你编写一些高并发的代码时,使用Futures或Actors响应,手动导入ExecutionContext.Implicits.global
真的很烦人。尝试找到一些好的解释为什么它不是默认参数,就像在Scalaz Concurrent
中的Strategy
一样done。这将非常有帮助,可以避免在代码中插入/删除所有这些导入。或者我错过了某些逻辑吗?
总体趋势似乎是要求用户显式导入隐式、额外的运算符或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
}