是否可以在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/