2014-05-05 16 views
6

Czy w Nimrod można używać wskaźników funkcji?Jak mogę używać wskaźników funkcji w Nimrod?

Co Próbowałem to:

type fptr = (proc(int):int) 

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

var myf : fptr = f 

echo myf(0) 

ale gdy próbuję skompilować uzyskać:

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 

Odpowiedz

8

Oczywiście można użyć wskaźników, jedynym problemem jest to, że zapomniał zdefiniować nazwa pierwszego parametru i niestety powoduje awarię kompilatora. Poniższy przykład działa:

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

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

var myf : fptr = f 

echo myf(0) 

pamiętać, że można pominąć typ w deklaracji zmiennej myf. Można również pominąć nawiasy przy definicji typu proc. Zanotowałem błąd znaleziony przez programistów pod adresem https://github.com/Araq/Nimrod/issues/1183.

+5

Możesz także użyć nowej składni proc. Wystarczy zaimportować moduł 'future' i zastąpić' (proc (x: int): int) 'z' (int -> int) '. – dom96

Powiązane problemy