ما سلوك البرنامج التالي؟
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...).