一、内定义型
1. @prop @value 和 @key
@prop 表示一个键值对 .value取值 .key取键
@value 和 @key 分别表示取值和取键,没有定义,对应于实现语言的原生功能 例如javascript原生方法[]
或.
;对应于java Map类型push(key,value) 和 get(key)
在Nojson中一个核心的概念就是通过模糊定义的型代替路由来进行查找,而非具体到某个语言的某个特性函数或操作,即便其具体实现很有可能就是一个底层函数,但是通过与特地语言解耦,使得Nojson更加关注业务,其script风格也更能够直接描述业务成为一份名副其实的业务说明文档,
2. @num @str @obj @bool
@num 值为number类型 原生语言的类型判断功能 例如javascript typeof str == ‘number’;java 的 obj instanceof Integer || instanceof Double || instanceof Float
@str 值为string类型 原生语言的类型判断功能 例如javascript typeof str == “string”;java 的 obj instanceof String
@obj 值为object类型 原生语言的类型判断功能 除了@num @str的非null和undefined值;java 中非null的 Map
@bool 值为boolean类型
3. @reg (known as @str)
@str型的值满足正则表达式,只用作定义其他型 例:?color = @reg = “^#[A-Z]{3}” 定义一种新的型color 其值形为#RED #BLA
4. @single (known as @obj)
表示只有一个键值对的对象类型
例:
{
"number_test@wrong":123, //不是single型 因为不是对象 是number
"color_test@single":{
"red":"#RED"} //是single型 因为对象只有一个键值对
}
5. @pure (@single included)
@pure 表示所有值同属于一种类型
例:
{
"_1":"#RED",
"_2":"#BLA",
"_3":"#DGR"
}
@single型值肯定为@pure型
6. @it
表示迭代。 @it(item@T,id@num|str),collection)
7. @list @set
?list=@obj@it(kv@prop[.key == @num])
它定义了如下一个类型检查器
javascript代码实现如下:
//检查是否是list型值
Nojson.testIsListType(test_data){
//检查是否是object型值
if(Nojson.testIsOjectType(test_data)){
//每个key都是number类型的
return Object.keys(test_data).every(key=>Nojson.testIsNumberType(key));
}
return false;
}
?set=@obj[!@list]
它定义了如下一个类型检查器
Nojson.testIsSetType(test_data){
return !Nojson.testIsListType(test_data);
}
变量与id
除了由``@``开头和由``.``开头的以字母或下划线为首的单词为变量
定义一个变量用``var``关键字 这同其他语言相同
由纯数字开头的变量为id值,将代表唯一一个实例,主要参与游戏中的筛选,抽取,排序等等。
二、支持的运算符
=
赋值运算符> >= == != <= <
比较运算& | !
逻