在使用该命令
nim c -r test.nim arg1 arg2
编译运行nim程序时,可以在文件名的后面加上命令行参数,我们来看看在程序中该怎样使用该命令行参数。
在nim的os模块中提供了这样几个方法用于操作命令行参数:https://github.com/nim-lang/Nim/blob/devel/lib/pure/os.nim
1. proc paramCount(): int {.tags: [ReadIOEffect], raises: [].}
返回应用程序中给出的命令行参数的个数。
如果不带命令行参数执行二进制文件paramCount()将返回0.然后,你可以使用paramStr()查询每个参数,或者使用commandLineParams()一次取回全部的参数。
有效性:在Posix中,没有一种可移植的方法从DLL得到命令行参数,因此paramCount()过程没有在Posix环境中定义。你可以使用declared()测试它的可用性(有效性)。
例如:
when declared(paramCount):
# Use paramCount() here
else:
# Do something else!
2. proc paramStr(i: int): TaintedString {.tags: [ReadIOEffect], raises: [].}
返回赋给应用程序的第i个命令行参数。
i应该在1..paramCount()范围内,对于无效的值将会引发EInvalidIndex异常。相反使用这个过程迭代所有的paramCount(),你可以调用方便的commandLineParams()。
调用paramStr(0)是可能的,但这将返回OS特定的内容(通常是调用的可执行文件的名字)。你应该避免使用paraStr(0),而是调用getAppFilename()。
有效性:在Posix中,没有一种可移植的方法从DLL得到命令行参数,因此paramCount()过程没有在Posix环境中定义。你可以使用declared()测试它的可用性(有效性)。
例如:
when declared(paramStr):
# Use paramStr() here
else:
# Do something else!
3.proc commandLineParams(): seq[TaintedString] {.raises: [], tags: [ReadIOEffect].}
方便的过程返回命令行参数。
这仅返回参数。如果你想得到应用程序的可执行文件名,调用getAppFilename()。
有效性:在Posix中,没有一种可移植的方法从DLL得到命令行参数,因此paramCount()过程没有在Posix环境中定义。你可以使用declared()测试它的可用性(有效性)。
例如:
when declared(commandLineParams):
# Use commandLineParams() here
else:
# Do something else!
4.测试代码
#保存文件为nimTest.nim
import os
when declared(commandLineParams):
var a,b=commandLineParams()
echo a, " ",b
for i in commandLineParams():
echo i
else:
discard
when declared(paramCount):
echo "命令行参数个数:",paramCount()
else:
discard
when declared(paramStr):
for i in 1..paramCount():
echo paramStr(i)
echo "单个输出:"
echo paramStr(1)
echo paramStr(2)
echo paramStr(0)
else:
discard
编译运行文件:nim c -r nimTest.nim 3 4