ماذا يطبع البرنامج التالي؟
package main
import "fmt"
func main() {
a := [...]int{0, 1, 2, 3}
x := a[:1]
y := a[2:]
x = append(x, y...)
x = append(x, y...)
fmt.Println(a, x)
}
الخيارات:
- [0 1 2 3] [0 2 3 3 3]
- [0 2 3 3] [0 2 3 3 3]
- [0 1 2 3] [0 2 3 2 3]
- [0 2 3 3] [0 2 3 2 3]
الإجابة: [0 2 3 3] [0 2 3 3 3]
شغّله على Go play.
النقاط الأساسية:
- في البداية، تكون الشريحة
yهي[2 3]، والشريحةxهي[0]مع ثلاث خانات عناصر زائدة (بعبارة أخرى، سعتها 4)، - يغيّر استدعاء
appendالأول الشريحةxإلى[0 2 3]مع خانة عنصر زائدة واحدة. وبما أن الشريحةxوالمصفوفةaتتشاركان العناصر (قبل السطر 10)، تُغيَّر المصفوفةaإلى[0 2 3 3]. والشريحةyوالمصفوفةaتتشاركان العناصر أيضاً، لذا تُغيَّر الشريحةyإلى[3 3]. - ولأن الشريحة
xلا تملك سعة زائدة كافية، يخصص استدعاءappendالثاني مصفوفة أساسية جديدة للشريحةx. لذا لا يعدّل الاستدعاء المصفوفةa. وتُغيَّر الشريحةxإلى[0 2 3 3 3].