英文:
Is there a method literal?
问题
可以定义一个方法字面量吗?就像下面的代码一样,但是能够正常工作。
type Fn struct {
sw Dialer
}
var x Fn
fn := func(x Fn) Reboot() error {
// 方法体
}
可以将方法定义为字面量,但是在Go语言中,方法必须与结构体关联。在你的代码中,fn
应该是一个方法,而不是一个变量。你可以将方法定义为结构体的字段,然后在需要的时候调用该方法。以下是一个示例:
type Fn struct {
sw Dialer
}
func (f Fn) Reboot() error {
// 方法体
}
func main() {
var x Fn
x.Reboot()
}
在上面的示例中,Reboot
方法被定义为Fn
结构体的方法,并在main
函数中调用。
英文:
Is it possible to define a method literal? Something like the code below but working.
type Fn struct{
sw Dialer
}
var x fn
fn := func (x Fn) Reboot() error { }
答案1
得分: 2
不,但你可以使用一个“函数值”,这样它可以在以后被赋值。在与网络相关的包中,常见的做法是在结构体中定义一个Dial func(network, addr string) (net.Conn, error)
字段,可以用自定义的拨号器(例如http.Transport)替换它。
type Fn struct {
Reboot func() error
}
func main() {
f := Fn{}
f.Reboot = func() error {
return nil
}
f.Reboot()
}
英文:
No, but you can use a "function value", so that it can be assigned later on. A common one in network related packages is for a struct to have a Dial func(network, addr string) (net.Conn, error)
field that can be replaced with a custom dialer (e.g. http.Transport)
type Fn struct {
Reboot func() error
}
func main() {
f := Fn{}
f.Reboot = func() error {
return nil
}
f.Reboot()
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论