nim支持将一个程序分成若干个模块的概念。每个模块都有自己的文件.nim的一个源文件通常称为一个模块,模块可以使信息隐藏和分开编译。一个模块可以通过import语句访问另一个模块的标识符.
这里我们就介绍几种方法在一个模块中去访问另一个模块中的标识符:
#Moduel importtest
var
str*:string="hello" #`*`表示该符号为模块的输出符号,可以在其他模块中访问
#a,b*:int=5 #这样定义,只是把b定义为了出口变量,a不是
a*,b* :int=5 #a,b皆为输出符号
c,d:float=5.5
proc addtest*(a,b:int):int=
result=a+b
proc stringtest*(s:string):string=
result = s & "world"
proc subtest*(c,d:float):float=
result=c-d
echo subtest(c,d)
测试代码:
##导入文件只能导入当前目录以及其子目录下的文件
discard """
import importtest except addtest #导入importtest模块,除了addtest过程
echo stringtest(str)
echo addtest(a,b) #Error: undeclared identifier: 'addtest' 没有导入importtest模块中的addtest,所以不能使用
"""
discard """
import importtest as it #为了使用方便,可以为复杂的模块名定义一个别名
echo it.a #与echo a相同 #这里也可以不使用别名调用标识符,若使用模块名则必须使用定义的模块别名,不可使用原模块名
echo it.stringtest(str)
"""
discard """
#from importtest import a,b,addtest,c #无法导入一个模块中的非输出符号,此处c是importtest模块中的非输出符号
from importtest import a,b,addtest
echo addtest(a,b)
#echo str #没有导入str,这里不能使用
#echo c
"""
discard """
from importtest import nil
echo importtest.a #必须使用模块名作为前缀
echo importtest.addtest(importtest.a,importtest.b)
echo importtest.c #即使用模块名为前缀也无法访问一个模块中的非输出符号
"""
discard """
from importtest as it import nil #当使用别名时,只能用别名调用模块中的标识符,原模块名不能再使用
echo it.a
echo it.addtest(it.a,it.b)
"""
discard """
include importtest #导入整个文件的内容,这样无法使信息隐藏
echo addtest(a,b)
echo stringtest(str)
echo c
echo subtest(c,d)
"""