gpt4 book ai didi

go - 如何将接口(interface)传递给有很多参数的方法

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:33 27 4
gpt4 key购买 nike

我写了一个惰性代码来演示我必须实现接口(interface)的问题。我有方法 M1、M2,它们将结构 X 作为参数并具有结构 Y 的类型。我希望所有这些方法都由单个接口(interface) I 实现。问题是实现接口(interface)的方法 M 我需要注意需要传递给子方法 (M1,M2) 的参数。我得到一个错误:<argument name> used as a value当我在 M 中传递多个参数时

type Y struct {
a int
}

type X struct {
a int
}

(y *Y) func M1(x X) struct {
return y.a+x.a
}

(y *Y) func M2(x X) struct {
return y.a*x.a
}

type I interface {
M1(x X)
M2(x X)
}

func M(i I, x X) {
fmt.println(i.M1(x)) //returns an error i.M1(x) used as a value
fmt.println(i.M2(x)) //returns an error i.M2(x) used as a value
}

最佳答案

导致的问题<argument name> used as a value您的示例中的错误是构成接口(interface)的函数 I被声明为没有返回值:

type I interface {
M1(x X)
M2(x X)
}

您当然不能将函数调用作为 Println 的参数传递如果函数不返回任何内容:fmt.println(i.M1(x)) .更改示例中的接口(interface)声明以返回某些内容(以及更多修复*):

type Y struct {
a int
}

type X struct {
a int
}

func(y *Y) M1(x X) int {
return y.a+x.a
}

func(y *Y) M2(x X) int {
return y.a*x.a
}

type I interface {
M1(x X) int
M2(x X) int
}

func M(i I, x X) {
fmt.Println(i.M1(x))
fmt.Println(i.M2(x))
}

playground

*) 更改 M1 & M2返回 int而不是 struct并修复带有接收器的函数声明的语法

关于go - 如何将接口(interface)传递给有很多参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52031671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com