Lite语言——从入门到放弃(三)

kulics · · 980 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Github

这次我们来看看异常处理和异步处理,顺带 Lambda 语法。

异常处理

Lite 沿用了现代面向对象语言的 try catch 机制,不同的是使用 ! 来表达语法,不需要 try、catch、finally 这几个关键字。

! {
    # 此区域内所有逻辑都会被监听异常 #
    do_something()
} ex IOException {  # 捕获IO异常 #
    !(ex)  # 继续抛出异常 #
} e {  # 可以省略类型,捕获默认异常 #
    !(e)
} _ {
    # 无论如何都会执行的操作,可以用来释放资源 #
}

资源回收处理

计算机有很多资源都是需要使用完毕后立即释放的,在这里可以使用资源处理语法 ! id = value 语法声明资源,逻辑离开区域后就会自动释放,避免了手动控制。

! file = open_file("./test.lite")
# 逻辑处理完后自动释放 file #

Lambda 语法

上一次我们讲过如何传递函数类型的参数,除了直接使用预先定义好的函数标识符,我们还可以直接创建匿名函数 。

useFunction( {i int ->} {
    do_something()
})

当然了,这种方式有点啰嗦。我们既然知道了函数的具体类型,就可以交给编译器去分析声明,用更简单的 Lambda 语法 { id -> } 来帮我们声明函数。

useFunction( { i -> 
    do_something()
})

嗯,简单多了。

如果执行的函数只有一个函数参数,我们甚至可以省略外面的括号。

useFunction{ i -> do_something() }

这样就很棒了是不是?

异步处理

Lite 采用了现代的 async/await 语法进行异步逻辑处理。

语法很简单,还记得我们在函数中使用的箭头 -> 吗?我们只要改成 ~> 就声明了async函数。

do_something(~>) {
}

async函数可以在内部使用异步等待语法 <~ 来执行其它的async函数。

它会自动包装返回值,使得可以用同步调用的语法来调用异步功能,简化了我们使用多线程的方式。

main(~>) {
    value = <~ do_something()
}
do_something(~> v int) {
    <~ sleep(1000)
    <- 1
}

同样道理,我们在 Lambda 中也可以这样使用异步处理

do_something{ ~>
    <~ sleep(1000)
}

结尾

以上就是 Lite 异常处理和异步处理的语法,对比起其它语言的语法是否更简洁呢?
下一次我们会来看看可选类型和泛型语法。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:kulics

查看原文:Lite语言——从入门到放弃(三)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

980 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传