Из тонкой спецификации :
Наборы методов
[...] Набор методов соответствующего типа указателя * Tнабор всех методов, объявленных с помощью приемника * T или T (то есть он также содержит набор методов T).[...]
Ваша Abs
функция находится в наборах методов как Vertex
, так и *Vertex
, поэтому *Vertex
- это Abser
, как и Vertex
.
Другие связанные разделы:
В общем, указатели автоматически разыменовываются, когда это возможно, поэтому вы можете сказать x.M()
и x.V
, не беспокоясь о том, является ли x
указателем, и нет необходимости в C ->
или разыменование вручную (например, (*x).M()
или (*x).V
).