WINDOWS下,想取得程序的运行路径可以这么做:
arg[0]:match('.*\\')
Lua没有switch语句,我们就给它加一个:
一、简单的switch:
function switch(SwitchVal)
return function(SwitchTable)
local ReFunc = SwitchTable[SwitchVal]
if type(ReFunc) ~= "function" then
ReFunc = SwitchTable[ReFunc] or SwitchTable.default
end
return ReFunc and ReFunc()
end
end
优点是实...
local socket = require('socket')
local MyHostName = socket.dns.gethostname() --本机名
local MyIP = socket.dns.toip(MyHostName) --本机IP
lua for windows自带的那个SciTE对中文支持不怎么好,按下面的方法改一下就行了:
启动scite, 照下面的顺序点击菜单:Options, Open User Options file, 打开Sciteuser.properties
code.page=936
output.code.page=936
character.set=134
font.monospace=font:宋体,size:10
font.base=font:宋体,size:10
保存,关闭
Lua中,我们一般用os.execute()执行命令行命令,此时会显示命令行窗口,并返回系统状态码。
但我们有时需要捕获返回内容/不显示命令行窗口,则可以使用函数:io.popen(),这个函数也可以执行命令行命令,但是返回的是一个文件,同时不显示命令行窗口。
例子:
local ts= io.popen('dir')
local s = ts:read("*all")
print(s)
require 'luacom'
local excel = luacom . CreateObject( 'Excel.Application' )
excel . Visible = true
local book = excel . Workbooks:Add()
local sheet = book . Worksheets( 1 )
sheet . Name = 'gty'
local range = sheet:Range( 'A1:A10' )
local cell = sheet . Cells( 1 , 1 )
sheet:Range( 'D3:D6' ...
--导入luacom模块
require('luacom')
require('lfs') --导入lfs模块用于取得当前路径,和操作EXCEL无关
local sMainPath = lfs.currentdir() --取得当前路径
--创建EXCEL对象
MyExcel = luacom.CreateObject("Excel.Application") --创建EXCEL对象
--MyExcel = luacom.CreateObject("Ket.Application") --创建WPS表格对象,新版的WPS已经兼容了MSO,就不用这...
Pascal(Delphi)、VB中都有一个with关键字,可以帮助程序员减少大量的输入、提高效率。Lua 中没有这个关键字,但我们可以利用以下方式模拟。
例:
a={}
setfenv(function()
a=1
b=2
end,a)()
以上代码效果等于:
a.a=1
a.b=2
等价于Pascal中的:
with a do
begin
a:=1;
b:=2;
end;
当然,这样只能用于赋值,如果需要在a{}中写函数就不能这么写了。这时可以这样写:
a=s...
看到一个求素数的题目,忽然想试试欧拉筛有多快。
题目:求一千万内素数的个数。
先看最普通的筛子:1077秒
T = os.time()
--求iMaxN内的素数
local iMaxN = 10000000
--普通筛子
local iSS = {} --素数数组
local iSZ = {} --筛子
for i = 1, iMaxN do
iSZ[i] = i
end
--过筛求出所有素数
for i = 2, math.sqrt(iMaxN) do
for j = i + 1, iMaxN do
if ...