هل من الممكن تحديد نوع إرجاع وظيفة مجهول ، في سكالا؟

StackOverflow https://stackoverflow.com/questions/2088524

سؤال

أعلم أنه يمكنك إنشاء وظيفة مجهولة ، واطلب من برنامج التحويل البرمجي استنتاج نوع الإرجاع الخاص به:

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
}

نظرًا لأنه في معظم المواقف ، لا يوجد فرق إذا كان ينحدر من الوظيفة ، فقط ما إذا كان لديه تطبيق.

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