Skip to main content
Glama
02.脚本语法.md8.44 kB
--- title: "脚本语法" date: "2022-01-29T20:50:43.000Z" permalink: "/pages/base/script/" --- # 关键字 关键字 含义 var 定义变量 if 条件语句的引导词 else 用在条件语句中,表明当条件不成立时的分支 for for循环语句 in 与for配合使用 while while循环语句 continue 执行下一次循环 break 跳出循环 return 终止当前过程的执行并正常退出到上一个执行过程中 exit 终止当前脚本,并退出返回,如exit 200,'执行成功',[1,2,3]; v0.5.0中新增 assert 断言 v1.3.4中新增 instanceof 判断一个对象是否为一个类的实例 v2.0.0中新增 try 用于捕获可能发生异常的代码块 catch 与try关键字配合使用,当发生异常时执行 finally 与try关键字配合使用,finally块无论发生异常都会执行 import 导入Java类或导入已定义好的模块 as 与 import 关键字配合使用,用作将导入的 Java类或模块 命名为一个本地变量名 new 创建对象 true 基础类型之一,表示 Boolean 的:真值 false 基础类型之一,表示 Boolean 的:假值 null 基础类型之一,表示 NULL 值 async 异步调用 # 运算符 数学运算 比较运算 逻辑运算 位运算 + 加法 < 小于 && 并且 &、&= 与 - 减法 <= 小于等于 || 或者 |、|= 或 * 乘法 > 大于 ^、^= 异或 / 除法 >= 大于等于 ~、~= 取反 % 取模 == 等于 <<、<<= 左移 ++ 自增 != 不等于 >>、>>= 右移 -- 自减 === 等于 >>>、>>>= 无符号右移 !== 不等于 # 类型 类型 写法 byte 123b、123B short 123s、123S int 123 long 123l、123L float 123f、123F double 123d、123D BigDecimal 123m、123M boolean true、false string 'hello' string "hello" string """多行文本块,主要用于编写SQL""" Pattern /\d+/g,/pattern/gimuy 用于定义正则 lambda ()=>expr、(param1,param2....)=>{...} ()->expr、(param1,param2....)->{...} list [1,2,3,4,5] map {key : value,key1 : value} {[key] : "value"} [key]表示动态从变量中获取key值 # 一元运算符 您可以通过一元运算-符将数字取反,例如-234。要取反布尔表达式,可以使用!运算符,例如!true。 自增/自减 i++ 、 ++i、i--、--i # 算术运算符 支持常见的算术运算符,例如1 + 2 * 3 / 4 % 2,同样也支持+=、-=、*=、/=、%= # 比较运算符 23 < 34,23 <= 34,23 > 34,23 >= 34,true != false,23 == 34 比较运算符结果为boolean类型 # 逻辑运算符 除了一元运算!符,您还可以使用&&和||。就像Java中一样,运算符也是一种短路运算符。如果&&左边计算为false,则不会计算右边。如果||左侧为true,则不会计算右边 在0.4.6+版本中增强了&& || 不再强制两边必须是布尔类型。作用与JS一样 # 三元运算符 三元运算符是if语句的简写形式,其工作方式类似于Java中,例如true ? "yes" : "no" 在0.4.3+版本中,增强了if 和三元运算符,不再强制值必须是布尔类型,可以写if(xxx)的形式当xxx为以下情况时为fasle、其它情况为true * null * 空集合 * 空Map * 空数组 * 数值==0 * 非空字符串 * false # 类型转换 可使用::type(defaultValue) 的方式进行类型转换,如 var a = "123"::int; // 123 var b = "abc"::int(111); // 111 var c = "2020-01-01"::date('yyyy-MM-dd'); // 转换为date # 可选链操作符 可选链操作符(?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?.操作符的功能类似于.链式操作符,不同之处在于,在引用为空 的情况下不会引起错误,该表达式短路返回值是 null。 当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明。在探索一个对象的内容时,如果不能确定哪些属性必定存在,可选链操作符也是很有帮助的。 obj?.prop obj?.method(args) 示例: var a = null; var b = a?.name; // b = null; var c = a?.getName(); // c = null; # 扩展运算符 扩展运算符,又叫展开语法(Spread syntax), 是用于将list或map在语法层面展开; 语法: > lambda 调用 var sum = (a,b,c) => a + b + c; System.out.println(sum(...[1,2,3])) /* 结果:6 */ > list 展开 var arr = [3,4,5]; System.out.println([1,2,...arr,6,7]) /* 结果:[1, 2, 3, 4, 5, 6, 7] */ > list 展开到 map 中 var arr = [3,4,5]; System.out.println({key1:1,...arr}) /* 结果:{key1=1, 0=3, 1=4, 2=5} 虽然这些key看起来像数值,但其实是String类型的key,如果把它们转为JSON看起来是这样的: {"key1":1, "0":3, "1":4, "2":5} */ > map 展开 var map = {key2:2} System.out.println({key1:1,...map,key3:3}) /* 结果:{key1=1, key2=2, key3=3} */ # for循环 当前for循环只支持两种,循环集合或Map # 循环集合 import 'java.lang.System' as System; var list = [1,2,3]; for(index,item in list){ //如果不需要index,也可以写成for(item in list) System.out.println(index + ":" + item); } /* 结果: 0:1 1:2 2:3 */ # 循环指定次数 var sum = 0; for(value in range(0,100)){ //包括0包括100 sum = sum + value; //不支持+= -= *= /= ++ -- 这种运算 } return sum; /* 结果:5050 */ # while循环 var count = 100; var sum = 0; while(count){ sum = sum + count; count = count - 1; } return sum; // 5050 # 循环map import 'java.lang.System' as System; var map = { key1 : 123, key2 : 456 }; for(key,value in map){ //如果不需要key,也可以写成for(value in map) System.out.println(key + ":" + value); } /* 结果: key1:123 key2:456 */ # Import导入 # 导入Java类 import 'java.lang.System' as System;//导入静态类并赋值给system作为变量 import 'javax.sql.DataSource' as ds;//从spring中获取DataSource并将值赋值给ds作为变量 import 'org.apache.commons.lang3.StringUtils' as string;//导入静态类并赋值给ds作为变量 import 'java.text.*' //此写法跟Java一致,在1.3.4中新增 System.out.println('调用System打印');//调用静态方法 System.out.println(ds); System.out.println(string.isBlank('')); //调用静态方法 System.out.println(new SimpleDateFormat('yyyy-MM-dd').format(new Date())); // 2020-01-01 # new创建对象 # 创建对象 import 'java.util.Date' as Date;//创建之前先导包,不支持.*的操作 return new Date(); # 导入已定义的模块 import log; //导入log模块,并定义一个与模块名相同的变量名 //import log as logger; //导入log模块,并赋值给变量 logger log.info('Hello {}','Magic API!') # 异步调用 # 异步调用方法 var val = async db.select('.....'); // 异步调用,返回Future类型 return val.get(); //调用Future的get方法 # 异步调用lambda var list = []; for(index in range(1,10)){ list.add(async (index)=>db.selectInt('select #{index}')); } return list.map(item=>item.get()); // 循环获取结果 # exit 语法格式为 exit expr[,expr][,expr][,expr][,expr][,expr][,expr].... 在magic-api中只取前三个值,分别对应code、message、data 如:exit 400,'参数填写有误' # assert 语法格式为 assert expr : expr[,expr][,expr][,expr][,expr][,expr][,expr].... 如:assert a == 1 : 400, 'a的值应为1' 相当于 if(a != 1){ exit 400, 'a的值应为1' } # 类型转换 通过::进行类型转换,如xxx::int、xxx::double等, 当前支持转换类型有int、double、long、byte、short、float、date var a = "1"; return { v1: a::int, v2: a::int(0), //转换失败时,值为0 v3: "2020-01-01"::date('yyyy-MM-dd') //转为Date } ::sql支持将数据转换为对应的sql类型, 比如: img::sql('blob') 可传入的参数请参考java.sql.Types中定义的常量,不区分大小写。 # 嵌入其它脚本语言 var name = "hello"; var test = ```javascript name + ' ~ world' ```; return test();

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Dwsy/magic-api-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server