اختبارات

استدعاء دالة 1

ما سلوك البرنامج التالي؟


package main

func f(vs ...interface{}) {
	print(len(vs))
}

func main() {
	f()
	f(nil)
	f(nil...)
}

الخيارات:

  • يطبع: 0 0 0.
  • يطبع: 0 1 0.
  • يطبع: 0 1 1.
  • يفشل في التصريف.

الإجابة: يطبع 0 1 0.

شغِّله على Go play.

النقاط الأساسية:

  • تُعامَل القيمة nil في f(nil...) كشريحة nil (من النوع []interface{}).
  • تُعامَل القيمة nil في f(nil) كعنصر داخل شريحة. فالاستدعاء f(nil) مكافئ لـ f([]interface{}{nil}...).
  • الاستدعاء f() مكافئ لـ f(nil...).