该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
没什么别的意思就是做来玩玩而已,目前只是简单的构思阶段,做不做甚至都还不确定。以下是目前构思的特性
1. 类Lua语法。因为Lua比较熟悉,虽然也有部分语法不喜欢,但大部分都还行。
-- if
if a == 1 then
end
-- loop
for i = 1, 3 do
end
while a == 1 do
end
2. 静态类型。因为Jass本身就是静态类型的。语法为
local x:int = 1
local y:string = "2"
local z:string = 3.0 -- 语法错误
function foo(a:int, b:int):string
return I2S(a + b)
end
3. 类型推导。在类型可以推断出来的地方,类型定义可以省略,例如下面都是合法的语法。
local x = 1 -- x的类型是int
local y = "2" -- y的类型是string
local z = 3.0 -- z的类型是float
local w = y -- w的类型是string
4. 数组
local a:int[]
for i = 1, 3 do
a[i] = i
end
5. 两种定义函数的方法。
function foo(a:int, b:int):string
return I2S(a + b)
end
foo(a:int, b:int):string =>
return I2S(a + b)
end
6. 匿名函数。
-- 由于类型推导,匿名函数定义里的类型都可以省略
TimerStart(t, 1.0, true, function()
DoNothing()
end)
TimerStart(t, 1.0, true, () =>
DoNothing()
end)
7. 类型继承。
typedef handle unit
8. 内置类型
int 等同于jass里的integer
float 等同于jass里的real
string 等同于jass里的string
bool 等同于jass里的boolean
void 等同于jass里的nothing
不可被继承
function 等同于jass里的code
不可被继承,类型需要指明参数和返回值的类型,例如
local foo:(int,int):int
-- 语法错误
foo = (a:int):int =>
return a
end
foo = (a:int, b:int):int =>
return a + b
end
9. 模块化
-- ModuleA文件
-- 局部变量模块外不可见
local a = 1
-- 使用export让模块外可见
export b = 2
-- ModuleB文件
local A = import 'ModuleA'
local a = A.a -- 语法错误
local b = A.b
10. 对象
-- Calc文件
local a = 1
export b = 2
export function init(c:int):void
b = a + c
end
-- Main文件
local Calc = class 'Calc'
local a = Calc(10)
11. 函数重载
function add(a:int, b:int):int
return a + b
end
function add(a:string, b:string):string
return a + b
end
local x = add(1, 2) -- 3
local y = add("1", "2") -- "12"