如何声明带有接收者作为类型的函数?
我认为我可以做到以下几点,但它抱怨语法错误:
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 {
...
}
答案 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