PAYATHON 2026

如何在 functional programming 中将 list 的值格式化为 string?

技术老齐

在 Gleam 中,可以先用 list.map 将每个元素格式化为字符串,再用 string.join 以 ", " 为分隔符拼接。这样无需提前确定列表长度,也不用手动处理末尾多出的逗号。

Gleam 实现

以整数列表为例:

import gleam/int
import gleam/io
import gleam/list
import gleam/string

pub fn format_my_list(values: List(Int)) -> String {
  values
  |> list.map(fn(value) {
    "thing: " <> int.to_string(value)
  })
  |> string.join(with: ", ")
}

pub fn main() {
  io.println(format_my_list([1, 2, 3]))
  // 输出:thing: 1, thing: 2, thing: 3
}

format_my_list 的函数类型是 List(Int) -> String,接收整数列表,返回字符串。

为什么分成两步

先用 list.map 格式化每个元素。它会对列表中的每个值应用指定函数,按原有顺序生成新列表:

[1, 2, 3]

转换后得到:

["thing: 1", "thing: 2", "thing: 3"]

这里,int.to_string(value) 将整数转换为字符串,<> 再将它与 "thing: " 拼接。

接着用 string.join 合并这些字符串。它会在相邻元素之间插入分隔符,得到:

thing: 1, thing: 2, thing: 3

代码中的 |> 是管道运算符,会把左侧的结果传给右侧函数的第一个参数。上面的实现也可以展开为:

pub fn format_my_list(values: List(Int)) -> String {
  let formatted = list.map(values, fn(value) {
    "thing: " <> int.to_string(value)
  })

  string.join(formatted, with: ", ")
}

两种写法含义相同,按自己的阅读习惯选择即可。

空列表和类型需要注意什么

空列表会得到空字符串;只有一个元素时,结果中不会出现分隔符:

format_my_list([])
// -> ""

format_my_list([42])
// -> "thing: 42"

List(Int) 只限定元素类型,不限定列表长度。如果输入是字符串列表,就把参数类型改为 List(String),并将格式化函数改为:

fn(value) { "thing: " <> value }

<> 两侧都必须是字符串,所以整数需要先转换。处理其他类型时,也需要提供相应的转换或格式化逻辑,后面仍然可以用 string.join 拼接。

备注:内容仅供参考。