近期在Linker推荐下使用markdown(Lua版),无意中发掘出了一个小问题。
在Windows下,由于我已经将.lua扩展名的文件直接关联到了解释器lua.exe,所以我这样运行markdown:
markdown.lua test.txt
结果程序并没有解析我的源文件,而是不紧不慢地开始读标准输入。我误以为这个程序有个性,忽略参数,直接读标准输入,于是又这样执行:
markdown.lua < test.txt
于是程序直接崩掉。
我很是不解,在寻找各种解决方案(不堪回首)无效后,哭着去找Linker,结果他这样执行:
lua markdown.lua test.txt
成功之后,像看外星人一样看着我,我成功晕菜。
然后这我就纳闷了:lua markdown.lua和直接markdown.lua难道还有区别?于是我写了这样的测试test.lua:
for k, v in pairs(arg) do
print(k, v)
end
然后在Windows下执行:lua test.lua aa bb cc
输出:
1 aa
2 bb
3 cc
-1 lua
0 test.lua
再执行:test.lua aa bb cc
输出:
-1 D:\lua-5.1.3\src\lua.exe
0 E:\temp\test.lua
晕了,果然邪门,我抑制住情绪,在Linux下做同样的试验,当然在test.lua第一行要加上#!/bin/lua
执行:lua test.lua aa bb cc
输出:
1 aa
2 bb
3 cc
-1 lua
0 test.lua
再执行:./test.lua aa bb cc
输出:
1 aa
2 bb
3 cc
-1 /bin/lua
0 ./test.lua
怀着悲愤的心情,我宣布发现了Windows下Lua的这个不大不小的问题。我不想去研究Windows文件关联的宇宙超级无敌霹雳本质机理学问之类,也不想就Lua的可移植性发表什么言论,只想发自肺腑地呐喊一声:
Windows这个脑残!
回忆起小明的名言:
“要是世上没有Windows,还存在什么软件可移植性问题?”