Nim编程早茶
NimScript是Nim语言的子集,可以通过Nim的内置虚拟机(VM)解释执行。虚拟机可以使用Nim语言编译时执行的功能。
配置文件
NimScript 可以承担配置文件的功能。NimScript 文件后缀为 nims。
但我们使用 nim c -r example.nim 执行 nim 程序时,就会提示我们使用了哪些配置文件,在我的 win10 上显示如下
used config file 'D:\nim\config\nim.cfg'
如果在当前路径下,我们创建一个 example.nims,那么提示就会多一行
used config file 'C:\Users\blue\Documents\test.nims'
首先我们可以设置编译的标志:
# command-line: --opt:speed
switch("opt", "speed")
# command-line: --hint:off
switch("hints", "off)
# command-line: --forceBuild
switch("forceBuild")
NimScript 还定义了 -- 作为 switch 的语法糖,所以说,以上的代码等价于
--opt:speed
--hints:off
--forceBuild
我们执行 nim c -r example.nim,会发现提示大部分都消失了。
脚本文件
使用 NimScript ,我们可以轻松构建跨平台的脚本文件。下面我主要介绍,NimScript 在 ubuntu 系统中的使用。
exec 函数可以执行 shell 命令,下面的指令用于查找进程中 hexo 程序,并强制结束程序。执行 nims 程序,只要 nim example.nims ,也可以加上自定义的参数。
try:
exec "kill -s 9 `ps -e|grep hexo|awk '{print $1}'`"
except OSError:
discard
下面是我写的用于生成 hexo 博客,以及向百度爬虫推送连接的脚本文件。
其中 withDir,用于短暂的切换到某个目录,当离开 withDir 就会还原原来的目录。paramCount 用来获取命令行参数个数,paramStr 获取具体参数。readLineFromStdin() 使得我们可以从命令行读取输入。
import os except paramCount, paramStr
let
website = "https://tea.nim-cn.com/"
sitemap = "/root/blog/public"
dir = "/root/blog"
withDir dir:
if paramCount() == 3:
discard
elif paramCount() == 2 and (paramStr(2) == "back" or paramStr(2) == "b"):
exec "hexo g"
exec "hexo s &"
elif paramCount() == 2 and (paramStr(2) == "commit"):
echo "输入你的网址: "
let site = readLineFromStdin()
exec "echo '" & site & "' >" & dir / "urls.txt"
let file = splitFile(site)
if file.ext == ".html":
exec """curl -H 'Content-Type:text/plain' --data-binary @urls.txt "你的 baidu api"
exec """curl -H 'Content-Type:text/plain' --data-binary @urls.txt "你的 baidu api
exec "hexo g"
exec "hexo s &"
else:
exec "hexo g"
try:
exec "hexo s"
except OSError:
echo "bye-bye"