Scala үргэлжлэлийг блоклохгүй API-д ашиглах

Би хаалттай мэт санагдах API бүтээхдээ Scala (2.9.0) үргэлжлэлийг ашиглах гэж оролдож байна, гэхдээ энэ нь үнэндээ асинхрон байна. Та дараахь зүйлийг бичихийг хүсч байна гэж бодъё:

if(ask("Continue?")) //Prompts Yes/No
  name = input("Enter your name")

Where ask нь хэрэглэгч yes дарсан тохиолдолд логик утгыг буцааж өгч, оролт утгыг асууна. Үүнийг асуух ба оролт ямар ч утсыг блоклохгүй, зөвхөн үргэлжлүүлэн Газрын зураг дээр хадгалдаг вэб серверээс дуудаж байгааг дүрслэх (эсвэл сесс нь хамаагүй) хуудсыг хүлээх мөрөөр харуулахаас өмнө (ихэнх нөөцийг гаргах). Хариу нь буцаж ирэхэд газрын зураг дээрх үргэлжлэлийг хайж үзээд кодыг үргэлжлүүлнэ.

Одоогийн асуудал бол би ask -г тодорхойлох тохиромжтой аргыг олж чадахгүй байх шиг байна. мөн оролт нь дуудлагын контекстийн буцах төрлийг параметр болгон дамжуулахгүйгээр үргэлжлэлийг ашиглах явдал юм.

Хамгийн ойрхон ирсэн зүйл нь дараахь зүйлийг хийх явдал юм:

#!/bin/sh
exec scala -P:continuations:enable -deprecation "$0" "$@"
!#
import util.continuations._

//Api code
def display[T](prompt: String) = shift {
  cont: (Unit => T) => {
        println(prompt)
        cont()
    }
}

//Client code
def foo() : Int = reset {
  display[Int]("foo!") // <-- how do I get rid of the type annotation?
  5
}

def bar() : Unit = reset {
  display[Unit]("bar!")
}

println(foo())
bar()

Би үнэхээр дуудлага дээрх төрлийн тайлбараас салахыг хүсч байна. руу харуулах . Үүнийг хэрэгжүүлэх арга замыг мэддэг хүн байна уу? Клиент код илүү хялбар болоход API тодорхойлолт улам муухай болох нь надад хамаагүй. Баярлалаа!

11
задан juancn 28 July 2011 в 00:29
поделиться