Wit 2.2.0-beta 发布,支持省略分号

栏目: 软件资讯 · 发布时间: 7年前

内容简介:Febit Wit(原 Webit Script)是一个 Java 平台下的模板引擎,语法类似 JavaScript,支持自定义函数,全局变量,Lambda 表达式,核心模块轻巧,无第三方依赖,采用BSD开源协议。 <dependency>     <grou...

Febit Wit(原 Webit Script)是一个 Java 平台下的模板引擎,语法类似 JavaScript,支持自定义函数,全局变量,Lambda 表达式,核心模块轻巧,无第三方依赖,采用BSD开源协议。

<dependency>
    <groupId>org.febit.wit</groupId>
    <artifactId>wit-core</artifactId>
    <version>2.2.0-beta</version>
</dependency>

发布一下 2.2.0-beta, 体积依然很小, 只有 333.2KB (wit-core-2.2.0-beta.jar)

2.2.0-beta 又添加了一些新特性:

  • 支持省略行尾的分号: 行尾没有分号会进行贪婪解析, 除非新行开头是 `(` `[` `{` `++` `--` (这里和 ES6 里面的规则不太一样), 因此特例中的操作符如果和本行是一体的请不要换行, 当然如果希望严格要求不能省略可以修改设置 `engine.looseSemicolon=false`

  • 构建 ArrayMap 以及 函数调用传参 支持最后一个表达式冗余逗号 (trailing comma)

  • 数组类型支持函数引用

  • 函数/lambda 参数支持默认值, 但必须是常量

新特性示例:

// ==> 省略分号:
var a 
  = 111
  + 222
  + 333
  /3

// 至此结束, a = 444

b=0  // 结束, 新行无法贪婪解析成功
d=a  // 结束, ++ 强行
++
b    // 结束, 但 ++ 不会让下一行的强行终止, 相当于 ++ b

// 另外, 在无法解析时, `}`前也会尝试新加省略的分号

var func = (a,b) -> {return a+b}

var a = 1, b = 2
[a, b] = [b, a]
(a, b) -> a + b

// 行内还是需要用分号来分割的, 所以以上的放到一行就是: 
var a = 1, b = 2; [a, b] = [b, a]; (a, b) -> a + b

(a)->
{ return a } // 这样的换行会解析失败, 私心也是不接受这样的格式化

if(true)
{
 // do something
}  // 也会失败, 是的, 就只这种 { 前的换行这种格式化风格

(a) -> {
  return a 
}  // 把 { 放到上一行就可以了

// ==> 冗余逗号:

var arr = [1,2,3,]
var map = {
  "id": 123,
  "name": "wit",  // 是的, 这里也多了个逗号, 但是没关系,现在可以正常解析
}
func(
  "a",
  "b",
)

// ==> 数组类型支持函数引用:
var oldWay = native [] int
var newWay = int[]::new  // 怎么样, 这样风格就更统一了吧
var intArray

intArray = oldWay(100) 
intArray = (native [] int)(100)  // 恩, 直接用的话比较恶心..
intArray = newWay(100)
intArray = int[]::new(100)  // 怎么样? 比较明了吧, 还是更推荐这么直接用
intArray = int[][]::new(100) // 二位数组

int[]::toString(intArray)  // 虽然没什么用, 但是确实可以这样

// ==> 参数默认值: 如果不传或传入 null, 都将使用提供的默认值

func = (a, b=1, c) -> [a,b,c];
assertArrayEquals([null,1,null], func());
assertArrayEquals([1,2,null], func(1,2));
assertArrayEquals([1,2,3], func(1,2,3,4));
assertArrayEquals([1,1,3], func(1,null,3,4));

// 另外注意, 虽然是常量, 但是本身内部可能会被改变..
func = (map={"i":0})-> ++ map.i
assertEquals(1, func());
assertEquals(2, func());
assertEquals(11, func({"i":10}));
assertEquals(3, func());
// [另外注意] 的特别注意: 但你并不能真的当做累加器来用啊! 如果模板被重新加载,会!被!重!置! 想知道为什么? 加群才我来告诉你..

更多示例可以来这里:  https://github.com/febit/wit/tree/v2.2.0-beta/wit-core/src/test/resources/org/febit/wit/test/tmpls/auto

2.0 以来新增了不少实验功能, 欢迎体验, 不啰嗦, 开始忙活 2.3.0-beta... 
参考: 
https://www.oschina.net/news/85315/febit-wit-2-0-0-beta
https://www.oschina.net/news/87395/febit-wit-2-1-0-beta


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上所述就是小编给大家介绍的《Wit 2.2.0-beta 发布,支持省略分号》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Web Application Hacker's Handbook

The Web Application Hacker's Handbook

Dafydd Stuttard、Marcus Pinto / Wiley / 2011-9-27 / USD 50.00

The highly successful security book returns with a new edition, completely updated Web applications are the front door to most organizations, exposing them to attacks that may disclose personal infor......一起来看看 《The Web Application Hacker's Handbook》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换