带接收器的功能类型

时间:2018-08-10 07:01:21

标签: go type-alias

如何声明带有接收者作为类型的函数?

我认为我可以做到以下几点,但它抱怨语法错误:

type myFunc func(s *State) (blah Blah) err

func main() {
    b := &Blah{}
    s := &State{}

    var f = myF
    s.f(b)
}

func (s *State) myF(blah Blah) err {
    ...
}

1 个答案:

答案 0 :(得分:1)

您可以定义一个将接收器作为其第一个参数的函数类型(本质上是什么方法)。

extension UIImagePickerController {
     open override func viewDidLoad() {
         super.viewDidLoad()
         self.modalPresentationStyle = UIModalPresentationStyle.custom
     }
}

然后可以使用method expression创建该类型的值:

type myFunc func(*State, Blah) error
  

如果M在类型T的方法集中,则T.M是可以作为常规函数调用的函数,该函数具有与M相同的参数,并以作为方法接收方的附加参数作为前缀。

     

[...]

     

表达式

type Blah struct{}
type State struct{}

func (s *State) myF(Blah) error { return nil }

var f myFunc = (*State).myF
     

产生一个等效于Mv的函数,但以显式接收器作为第一个参数;它具有签名

T.Mv