Luaj++
简介
nirenr的luaj改版,增加对java更好的支持,以下内容来自NeLuaj提供的Luaj++参考手册,希望对您了解luaj++有帮助
入口文件
Activity main.lua
Service service.lua
AccessibilityService accessibility.lua
NotificationListenerService notification.lua
WallpaperService wallpaper.lua
服务可以使用setLuaDir(dir)设置运行目录,setEnabled(context)打开启动服务设置界面,getInstance()获取服务实例。
** 可省略非必要关键字 **
- 省略then
if a then
end
-->
if a
end
- 省略do
while a do
end
-->
while a
end
- 省略in
for k,v in pairs(t) do
end
-->
for k,v pairs(t)
end
- 省略function
local function a()
end
-->
local a()
end
- 支持switch
switch a
case 1,3,5,7,9
print(1)
case 2,4,6,8
print(2)
case 0
print(0)
default
print(nil)
end
- 支持when
a = when a
case 1,3,5,7,9
return 1
case 2,4,6,8
return 2
case 0
return 0
default
return nil
end
- 支持continue
for n = 1,10
if n%2 == 0
continue
end
print(n)
end
** 支持foreach**
for k,v : t
end
for k,v in t
end
** 支持defer **
defer后语句将在函数结束时运行 多个defer将按照后入先出原则运行。
** 支持?操作符 **
?a print(1)`print(2)
a = ?a print(1)`print(2)
** 支持三目 if **
b = if a 1 else 2
print(b)
** 支持try-catch-finally **
try
error("err")
catch(e)
print("catch", e)
finally
print("finally")
end
** 支持lambda,可以使用反斜杠代替lambda关键字 **
lambda a,b->a+b
lambda a,b=>print(a+b)
lambda a,b:print(a+b)
lambda () -> print("lambda")
** 支持import **
import 将导入包并设置为局部变量
import "java.lang.String" 返回值为 javaClass
import "java.lang.*" 返回值为 javaPackage
import str "java.lang.String" 设置别名
import "java.lang. ", "java.io. " 一次性导入多个包或类
** 支持module **
module自带环境,默认设置环境表的metatable为自己
module "name"
** 支持自赋值local **
local:print
将全局print设置为局部print
** 运算符优化 **
!= 可代替 ~=
! 可代替 not
&& 可代替 and
|| 可代替 or
** 支持位运算 **
- 按位与 a=1&2
- 按位或 a=1|2
- 按位异或 a=1~2
- 右移 a=1>>8
- 左移 a=8<<2
- 按位非 a=~2
** 支持64位整数 **
i=0xffffffffff
** 支持+= -= *= /= %= ^= //= &= |= ~= <<= >>= ..=运算 **
a+=1
a-=1
a*=1
a/=1
** 调用java优化 **
- javaClass 拓展函数/属性
Object.array{} -- 创建数组
print(Object.new) -- 类的构造器
print(Object.class) -- 获取类本身
Object.override{} -- 覆盖方法
- 直接()构建实例或实现接口,抽象类
b = ArrayList()
m = HashMap()
i = interface {
methodName=function(arg)
end
}
c = abstract {
methodName=function(super, arg)
end
}
- 支持覆盖方法
list = ArrayList.override {
function add(superCall, arg)
superCall(arg)
end
}()
list = ArrayList {
add = function(s, a)
end
}
- 支持元方法
function Button:print()
print(self)
end
Button(this):print()
- 支持批量设置属性
Button(this) {
text="test",
enabled=false
}
- 直接创建数组
i=int[10]
i=int{1,2,3}
i=Integer[10]
- java 方法使用.调用
b.add(!)
- is 方法简写
view.isActivated()
-->
view.Activated
- java getter/setter优化
b.setText("")
-->
b.text=""
m.abc=1
t=b.getText()
-->
t=b.text
t=m.abc
- 语法糖示例
mBtn.setOnClickListener(View.OnClickListener {
onClick = function(v)
print(v)
end
})
--> 忽略接口类型
mBtn.setOnClickListener({
onClick = function(v)
print(v)
end
})
--> 简写函数式接口
mBtn.setOnClickListener(function(v)
print(v)
end)
--> 简写此类方法
mBtn.onClick = function(v)
print(v)
end
- 数组操作
使用#获取Java常见数据类型的长度
使用 ["索引"] 或 .索引 直接访问数组
- 索引优化
t={}
t."end"=123
t.end=123
- 非必要的接口类型可省略
mViewPager.addOnPageChangeListener(
ViewPager.OnPageChangeListener{
onPageSelected = function(_)
end
}
)
-->
mViewPager.addOnPageChangeListener{
onPageSelected = function(_)
end
}
- 函数式接口可简写
obj.run(Runnable {
run = function()
-- do something
end
})
-->
obj.run(function()
-- do something
end)
** 支持增强型字符串格式化 **
a/A 有符号十六进制浮点数,
b 布尔值,
B 无符号byte类型,
c char类型,数字转文字,
i/d 有符号整数类型,字符串转十进制,
I 无符号int整数,
e/E/f/g/G 有符号浮点数,
o 八进制有符号整数,
L 无符号长整数,
u/U 字符串转u码,
x/X 十六进制有符号整数,字符串转hex,
r 解析字符串转义,
q 格式化为合法字符串形式,
s 转字符串,
l url编码,