سؤال

كتبت أول برنامج Scala العينة الأول ويبدو أن هذا:

def main(args: Array[String]) {     
    def f1 = println("aprintln")
    println("applying f1")
    println((f1 _).apply)
    println("done applying f1")
}

الناتج هو

applying f1
aprintln
()
done applying f1

هل يمكن لشخص ما يفسر لماذا يظهر إضافي ()؟ اعتقدت أن مجرد Aprintln ستظهر.

شكرا،

جيف

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

المحلول

هذا سوف يصلح المشكله:

def main(args: Array[String]) {         
    def f1 = println("aprintln")
    println("applying f1")
    (f1 _).apply
    println("done applying f1")
}

وهكذا سوف هذا:

def main(args: Array[String]) {         
    def f1 = "aprintln"
    println("applying f1")
    println((f1 _).apply)
    println("done applying f1")
}

ما الذي يحدث هنا هو أنك تقوم بتنفيذ الوظيفة f1 مع الدعوة إلى apply. وبعد الوظيفة f1 يطبع "aprintln"، والعودة (). وبعد ثم تمر بعد إخراج f1, ، الذي (), إلى دعوة أخرى إلى println. وبعد لهذا السبب ترى زوج إضافي من Parans على وحدة التحكم.

تحتوي الأقواس الفارغة على وحدة النوع في Scala، والتي تعادل الفراغ في Java.

نصائح أخرى

الأساليب التي سيكون لها نوع عودة الفراغ في جافا لديها نوع عودة الوحدة في Scala. () هو كيف تكتب قيمة الوحدة.

في التعليمات البرمجية الخاصة بك، يستدعي F1 Println مباشرة. لذلك عند الاتصال ب F1 وتمرير ناتجها إلى Println، تقوم كلاهما بطباعة سلسلة في نص F1، وطباعة ناتجها، والذي هو ToString'ed AS ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top