是否可以在Nimrod中使用函数指针?

我试过的是:

type fptr = (proc(int):int)

proc f(x:int): int =
  result = x+1

var myf : fptr = f

echo myf(0)


但是当我尝试编译时,我得到:

Hint: added path: 'C:\Users\Peter\.babel\pkgs\' [Path]
Hint: used config file 'C:\Program Files (x86)\Nimrod\config\nimrod.cfg' [Conf]
Hint: system [Processing]
Hint: hello3 [Processing]
Error: internal error: GetUniqueType
Traceback (most recent call last)
nimrod.nim               nimrod
nimrod.nim               handleCmdLine
main.nim                 mainCommand
main.nim                 commandCompileToC
modules.nim              compileProject
modules.nim              compileModule
passes.nim               processModule
passes.nim               processTopLevelStmt
cgen.nim                 myProcess
ccgstmts.nim             genStmts
ccgexprs.nim             expr
ccgstmts.nim             genStmts
ccgexprs.nim             expr
ccgstmts.nim             genVarStmt
ccgstmts.nim             genSingleVar
cgen.nim                 assignGlobalVar
ccgtypes.nim             getTypeDesc
ccgtypes.nim             getTypeDescAux
ccgtypes.nim             genProcParams
cgen.nim                 fillLoc
ccgutils.nim             getUniqueType
msgs.nim                 internalError
msgs.nim                 rawMessage
msgs.nim                 rawMessage
msgs.nim                 handleError

最佳答案

确保可以使用指针,唯一的问题是您忘记定义第一个参数的名称,不幸的是,这使编译器崩溃。以下示例起作用:

type fptr = (proc(x: int):int)

proc f(x:int): int =
  result = x+1

var myf : fptr = f

echo myf(0)


请注意,您可以在myf变量声明中省略类型。您也可以省略proc类型定义的方括号。我已在https://github.com/Araq/Nimrod/issues/1183向开发人员报告了您发现的错误。

关于nimrod - 如何在Nimrod中使用函数指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23479655/

10-09 08:13