请参阅这个最小的示例:
import sugar
type TestLambda = () -> void
type NamedTestLambda = tuple[name: string, lambda: TestLambda]
var testNil: TestLambda = () => void
var funcs: seq[NamedTestLambda] = @[
(name: "nil", lambda: testNil),
]
这会导致以下错误输出:
Error: internal error: getTypeDescAux(tyVoid)
No stack traceback available
To create a stacktrace, rerun compilation with './koch temp c <file>', see https://nim-lang.github.io/Nim/intern.html#debugging-the-compiler for details
Error: Build failed for package: nim_snake
... Execution failed with exit code 256
当我们将返回类型更改为 int 时,代码似乎编译没有问题:
import sugar
type TestLambda = () -> int
type NamedTestLambda = tuple[name: string, lambda: TestLambda]
var testNil: TestLambda = () => 1
var funcs: seq[NamedTestLambda] = @[
(name: "nil", lambda: testNil),
]
我应该向 nim 语言论坛报告这个问题,还是我在这里做错了什么?
Nim 1.6.16,编译为 C。
我认为问题在于
testNil
变量,它返回 void
而不是仅仅用 discard
丢弃或不返回值。
根据 nim 论坛上的讨论 void 仅用于说明某些东西没有类型,并且如果用作 proc/func 中的返回值,则仅意味着该函数不返回值。在 var testnil: TestLambda = () => void
中使用它是错误的,应该是 var testnil: TestLambda = () => discard
甚至 var testnil: TestLambda = () => echo "void"
。
希望这有帮助