gpt4 book ai didi

interface - 我可以键入断言一部分接口(interface)值吗?

转载 作者:IT老高 更新时间:2023-10-28 13:03:53 25 4
gpt4 key购买 nike

我正在尝试从 []Node[]Symbol 键入断言。在我的代码中,Symbol 实现了 Node 接口(interface)。

这里是一些周边代码:

 43 func applyLambda(args []Node, env Env) Node {
44 if len(args) > 2 {
45 panic("invalid argument count")
46 }
47 fixed, rest := parseFormals(args.([]Symbol))
48 return Func{
49 Body: args[1],
50 FixedVarNames: fixed,
51 RestVarName: rest,
52 }
53 }

这是我得到的错误:

./builtins.go:47: invalid type assertion: args.([]Symbol) (non-interface type []Node on left)

我相信这是有充分理由的。最好的方法是什么?

最佳答案

在说x.(T)变量x应该是接口(interface)类型的,因为只针对接口(interface)类型的变量动态类型是不固定的。虽然 Node 是一个接口(interface),但 []Node 不是。 slice 是一种独特的非接口(interface)类型。所以假设接口(interface)值的一部分也是一个接口(interface)是没有意义的。

Type Node 在你的代码中有明确的定义,因此是一个接口(interface)。您已经为其指定了方法列表。类型 []Node 不是那样的。它定义了哪些方法?

我了解您的出处。这可能是一个有用的捷径,但没有任何意义。这有点像期望 syms.Method()syms 的类型是 []SymbolMethod 时工作> 代表符号

用此代码替换第 47 行即可:

symbols := make([]Symbol, len(args))
for i, arg := range args { symbols[i] = arg.(Symbol) }
fixed, rest := parseFormals(symbols)

关于interface - 我可以键入断言一部分接口(interface)值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10478641/

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