التوابع والوصول غير المباشر عبر المؤشرات (2)
التوابع والوصول غير المباشر عبر المؤشرات (2)
يحدث أمر مماثل في الاتجاه المعاكس.
الدوال التي تستقبل وسيطًا قيميًا يجب أن تستقبل قيمة من ذلك النوع المحدّد:
var v Vertex fmt.Println(AbsFunc(v)) // OK fmt.Println(AbsFunc(&v)) // Compile error!
بينما تستقبل التوابع ذات المستقبِلات القيمية إما قيمة أو مؤشرًا بوصفه المستقبِل عند استدعائها:
var v Vertex fmt.Println(v.Abs()) // OK p := &v fmt.Println(p.Abs()) // OK
في هذه الحالة، يُفسَّر استدعاء التابع p.Abs() على أنه (*p).Abs().
النص الأصلي بالإنجليزية
Methods and pointer indirection (2)
The equivalent thing happens in the reverse direction.
Functions that take a value argument must take a value of that specific type:
var v Vertex fmt.Println(AbsFunc(v)) // OK fmt.Println(AbsFunc(&v)) // Compile error!
while methods with value receivers take either a value or a pointer as the receiver when they are called:
var v Vertex fmt.Println(v.Abs()) // OK p := &v fmt.Println(p.Abs()) // OK
In this case, the method call p.Abs() is interpreted as (*p).Abs().
هذا الدرس للقراءة فقط؛ جرّب المثال في الدرس التالي.