هل من الممكن تحديد نوع إرجاع وظيفة مجهول ، في سكالا؟
-
21-09-2019 - |
سؤال
أعلم أنه يمكنك إنشاء وظيفة مجهولة ، واطلب من برنامج التحويل البرمجي استنتاج نوع الإرجاع الخاص به:
val x = () => { System.currentTimeMillis }
فقط من أجل الكتابة الثابتة ، هل من الممكن تحديد نوع الإرجاع الخاص به أيضًا؟ أعتقد أنه سيجعل الأمور أكثر وضوحًا.
المحلول
في رأيي إذا كنت تحاول توضيح الأمور ، فمن الأفضل توثيق التوقعات على المعرف X عن طريق إضافة تعليق من النوع بدلاً من نتيجة الوظيفة.
val x: () => Long = () => System.currentTimeMillis
ثم سيضمن المترجم أن الوظيفة الموجودة على الجانب الأيمن تلتقي بهذا التوقع.
نصائح أخرى
val x = () => { System.currentTimeMillis } : Long
أعطى فابيان الطريق المباشر ، ولكن بعض الطرق الأخرى إذا كنت تحب السكر المصغرة تشمل:
val x = new (() => Long) {
def apply() = System.currentTimeMillis
}
أو
val x = new Function0[Long] {
def apply() = System.currentTimeMillis
}
او حتى
val x = new {
def apply(): Long = System.currentTimeMillis
}
نظرًا لأنه في معظم المواقف ، لا يوجد فرق إذا كان ينحدر من الوظيفة ، فقط ما إذا كان لديه تطبيق.
لا تنتمي إلى StackOverflow