English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يستخدم معالج Scala طريقتين لتحليل معامل الوظائف (function arguments) في الوقت الحالي:
التسمية المباشرة (call-by-value): يتم حساب قيمة تعبير المعامل أولاً، ثم تطبيقها داخل الداخلية للوظيفة؛
التسمية المباشرة (call-by-name): تطبيق تعبير المعامل غير المحسوب مباشرة داخل الداخلية للوظيفة
تم حساب قيمة تعبير المعامل قبل دخول الداخلية للوظيفة، بينما يتم حساب قيمة تعبير المعامل داخل الداخلية للوظيفة في التسمية المباشرة.
هذا يسبب ظاهرة حيث يتم حساب قيمة التعبير في كل مرة يستخدم فيها التسمية المباشرة.
object Test { def main(args: Array[String]) { delayed(time()); } def time() = { println("الحصول على الوقت، وحدة القياس هي النانو ثانية") System.nanoTime } def delayed(t: => Long) = { println("داخل طريقة delayed") println("المعدل: " + t) t } }
في هذا المثال، قمنا بتعريف طريقة delayed يستخدم هذا الدليل => رمزًا لتحديد التسمية المباشرة في اسم المتغير ونوع المتغير. بعد تنفيذ الكود أعلاه، الناتج هو كما يلي:
$ scalac Test.scala $ scala Test داخل طريقة delayed الحصول على الوقت، وحدة القياس هي النانو ثانية المعدل: 241550840475831 الحصول على الوقت، وحدة القياس هي النانو ثانية
في المثال، طبعت طريقة delay رسالة تعبر عن دخول هذا الدليل، ثم طبعت قيمة التي استلمتها طريقة delay، وأخيرًا عادت t.