جولة Go التفاعلية بالعربي › التوابع والواجهات 5 / 7 السابق التالي

التوابع والوصول غير المباشر عبر المؤشرات (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().

هذا الدرس للقراءة فقط؛ جرّب المثال في الدرس التالي.

استعادة المثال الأصلي؟

ستُحذف تعديلاتك على شيفرة هذا الدرس، ويعود المثال كما ورد في الكتاب. لا يتغيّر اختيارك لمحرك التشغيل.