Nim语言中如何声明相互调用的过程原型?
Nim中解决过程相互调用的未声明错误
完全可以用**前置声明(forward declaration)**解决这个问题,不需要用到面向对象代码。
Nim编译器要求调用过程前必须先知道这个过程的存在,相互调用的情况下没法把所有过程都放在最前面,这时候只需要先写出每个过程的签名(名字、参数类型、返回值类型),告诉编译器这些过程会在后面定义,之后再写具体实现即可。
修改后的代码如下:
# 前置声明三个过程的签名 proc mydouble(num: int): int proc mysum(firstnum, secondnum: int): int proc mymultiply(firstnum, secondnum: int): int # 具体实现部分保持不变 proc mydouble(num: int): int = echo "Warning, someone is trying to double a number, which is forbidden by law!" echo "I will allow it for now, but I filed it under the capital crimes register." return mymultiply(num, 2) proc mysum(firstnum, secondnum: int): int = if firstnum==secondnum: return mydouble(firstnum) else: return firstnum + secondnum proc mymultiply(firstnum, secondnum: int): int = if firstnum == 2: return mydouble(secondnum) elif secondnum == 2: return mydouble(firstnum) else: var res=0 for x in 1..secondnum: res=mysum(res,firstnum) return res var a,b,c: int a = 3 b = 2 c = -1 c=mydouble(a) echo c # expecting 6, with a warning about crime. c=mysum(a,b) echo c # expecting 5 c=mysum(a-1,b) echo c # expecting 4, with a warning about crime. c=mymultiply(a,a) echo c # expecting 9 c=mymultiply(a,b) echo c # expecting 6, with a warning about crime.
这样编译时就不会再报未声明标识符的错误了——前置声明相当于给编译器打了个招呼:"这些过程我后面会写,先别报错"。
内容的提问来源于stack exchange,提问作者GiMS_Pang
相关产品推荐
相关产品推荐

