学习路径
/
Gleam
Gleam
/
教学大纲
/
`use` 表达式
`u

`use` 表达式 属于 Gleam

2 个练习

关于 `use` 表达式

在 Gleam 中,编写和使用高阶函数是很常见的,也就是把其他函数作为实参的函数。有时一次使用很多高阶函数,代码会变得难以阅读,出现很多层缩进。

例如,下面这个函数调用了几个返回Result(Int, Nil)的函数,如果四个都成功,就把它们的值相加。

import gleam/result

pub fn main() -> Result(Int, Nil) {
  result.try(function1(), fn(a) {
    result.try(function2(), fn(b) {
      result.try(function3(), fn(c) {
        result.try(function4(), fn(d) {
          Ok(a + b + c + d)
        })
      })
    })
  })
}

Gleam 的use表达式让我们能不用缩进写出这段代码,往往也更容易阅读。

import gleam/result

pub fn main() -> Result(Int, Nil) {
  use a <- result.try(function1())
  use b <- result.try(function2())
  use c <- result.try(function3())
  use d <- result.try(function4())
  Ok(a + b + c + d)
}

一个use表达式会把它所在代码块中紧随其后的所有语句收集起来,作为回调函数传给那个函数调用,充当最后一个实参。use关键字和<-符号之间的变量,就是会传给回调函数的实参的名字。

// This use expression
use a <- function(1, 2)
io.println("Hello!")
a

// Is equivalent to this normal function call
function(1, 2, fn(a) {
  io.println("Hello!")
  a
})

回调函数可以接受任意数量的实参,也可以一个都不接受。

use a, b, c, d <- call_4_function()

use <- call_0_function()

要想创建能用use表达式调用的函数,除了把回调函数作为最后一个实参之外,没有其他特殊要求。

pub fn call_twice(function: fn() -> t) -> #(t, t) {
  let first = function()
  let second = function()
  #(first, second)
}

Gleam 的use表达式是一个非常强大的功能,可以用来解决很多问题,但过度使用会让代码难以阅读。一般更推荐使用普通的函数调用语法,只有在use表达式能让代码更易读时才用它。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 `use` 表达式