سؤال

كيف يستخدم الأشخاص المستمرون على نطاق أكبر وأصغر في سكالا؟

هل مكتبة أي أجزاء من مكتبة Scala Standard في CPS؟

هل هناك أي عقوبات كبيرة في الأداء في استخدام الاستمرارية؟

هل كانت مفيدة؟

المحلول

أنا أستخدم هذا لتحويل الوظائف غير المتزامنة للنموذج def func(...)(followup: Result => Unit): Unit لذلك بدلاً من الكتابة

foo(args){result1 => 
  bar(result1){result2 => 
     car(result2) {result3 =>
       //etc.
     }
  }
}

يمكنك كتابة

val result1 = foo(args)
val result2 = bar(result1)
val result3 = car(result2)

أو

car(bar(foo(args)))

(ملاحظة: لا تقتصر الوظائف على وسيطة واحدة أو مجرد استخدام النتائج السابقة كوسائط)

يرى http://www.tikalk.com/java/blog/asynchronous-functions-actors-and-cps

نصائح أخرى

ذراع سكالا (إدارة الموارد التلقائية) يستخدم الاستمرارية المحددة

import java.io._
import util.continuations._
import resource._
def each_line_from(r : BufferedReader) : String @suspendable =
  shift { k =>
    var line = r.readLine
    while(line != null) {
      k(line)
      line = r.readLine
    }
  }
reset {
  val server = managed(new ServerSocket(8007)) !
  while(true) {
    // This reset is not needed, however the  below denotes a "flow" of execution that can be deferred.
    // One can envision an asynchronous execuction model that would support the exact same semantics as below.
    reset {
      val connection = managed(server.accept) !
      val output = managed(connection.getOutputStream) !
      val input = managed(connection.getInputStream) !
      val writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(output)))
      val reader = new BufferedReader(new InputStreamReader(input))
      writer.println(each_line_from(reader))
      writer.flush()
    }
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top