Scala 2.10 futures kullanarak bir uyumsuz kütüphanesi oluşturuyorum. Kütüphane için kurucu, belirli bir özelliği uygulayan bir dizi kullanıcı tanımlı nesneler alır ve daha sonra kütüphane sınıfındaki bir metot, birtakım verileri kullanıcı tanımlı objelere tek tek gönderir. Kullanıcının, ana örneği ayarlarken async işlemleri için ExecutionContext
sağlamasını ve ardından, kullanıcı bağlamında nesnelerin gerektiği şekilde geçirilmesini sağlamak için bu bağlamı istiyorum. Basitleştirilmiş (? Sözde) kodu:Kapsanan ExecutionContext içeriğinde bulunan nesneler/yöntemler deneniyor
case class Response(thing: String)
class LibraryObject(stack: Seq[Processor])(implicit context: ExecutionContext) {
def entryPoint(data: String): Future[Response] = {
val response = Future(Response(""))
stack.foldLeft(response) { (resp, proc) => proc.process(data, resp) }
}
}
trait Processor {
def process(data: String, resp: Future[Response]): Future[Response]
}
Böyle bir şey kullanılmış olabilir:
class ThingProcessor extends Processor {
override def process(data: String, response: Future[Response]) = {
response map { _.copy(thing = "THE THING") }
}
}
class PassThroughProcessor extends Processor {
override def process(request: Request, response: Future[Response]) = {
response
}
}
object TheApp extends App {
import ExecutionContext.Implicits.global
val stack = List(
new ThingProcessor,
new PassThroughProcessor
)
val libObj = new LibraryObject(stack)
val futureResponse = libObj.entryPoint("http://some/url")
// ...
}
Ben ThingProcessor
için bir derleme hatası alıyorum:
örtük bir ExecutionContext bulamıyor ya kendiniz ister veya
ExecutionContext.Implicits.global
Sorum ben örtülü olarak kullanıcı tanımlı nesneler (ThingProcessor
ve PassThroughProcessor
) veya kullanıcıyı (kim sınıfları yazılı olacak) bu konuda endişe yapmadan kendi yöntemlerine LibraryObject
sahiptir ExecutionContext
olduğunu arz, nasıl olduğunu - yani
class MyFirstProcessor(implicit context: ExecutionContext)
veya
override def process(...)(implicit context: ExecutionContext) = { ... }
Bu, singleton nesneleri için geçerli olmayacak ... açık bir çözüm bulabilir misiniz? –
@ pagoda_5b güncellemeyi mi kastediyorsunuz? Açıkça düşünmüyorsam özür dilerim. –
Evet, oldukça kaygan görünüyor ve hoşuma gidiyor. –