您的位置:首页 > IT > 正文

当前报道:Gleam v0.27 发布,Rust 编写的函数式编程语言

来源:OSCHINA     时间:2023-03-07 07:17:32


(相关资料图)

Gleam 是一种类型安全且可扩展的编程语言,可用于 Erlang 虚拟机和 JavaScript 运行时。

最新发布的 0.27 包含以下变化:

支持在use表达式(useexpressions)中使用模式

Gleamv0.25引入了use表达式,该功能有助于避免 Gleam 程序中的“回调地狱 (callback hell)”。它非常强大,可用于模拟其他语言中的许多功能,例如提前返回、列表推导 (list comprehensions)、async/await、monadic do 语法等等!

pub fn handle(req: Request) -> Response {  // Return an error for non-post requests  use <- when(req.method != Post, return: method_not_allowed)  // Parse the request body or return an error  use json <- require_json_body(req)  // Open a database connection, closing it when we"re done  use conn <- database.with_connection  case database.insert(conn, json) {    Ok(record) -> created_response(record)    Error(err) -> bad_request_response(err)  }}

表达式的一个限制use是模式不能用于它们的赋值,只能用于裸变量。这意味着您不能用它们解构元组或其他数据结构。从这个版本开始,表达式中现在支持模式use,以满足所有解构需求。

use #(first, second) <- some_tuple_function()
引入panic关键字
case this_should_never_fail() {  Ok(value) -> continue(value)  // Oh no! Something went horribly wrong!  Error(_) -> panic}
优化断言

Gleam 的assert关键字用于确保数据匹配给定的模式,如果不匹配则程序崩溃。这很有用,但是用于assert此功能意味无法拥有assert与布尔表达式一起使用的功能,而这在其他语言中很常见。

为了解决这个问题,模式匹配功能已移至let assert语法。现有assert关键字已被弃用,稍后将用于更传统的断言功能,成为基于改进测试 Gleam 代码的人体工程学的更大 Gleam 里程碑的一部分。

let assert Ok(value) = this_should_never_fail()

详情查看发布公告。

相关文章