Clojure语言中let绑定里的下划线"_"代表什么含义?
在Clojure let绑定中下划线
_的含义 在Clojure(以及不少函数式编程语言里),下划线_是社区约定俗成的占位符,核心含义是:我明确知晓这个位置存在一个值,但当前逻辑完全不需要使用它。
针对你给出的示例代码解释
你的代码是典型的序列解构场景:
(defn my-fun [param] (let [[x _] param] x))
这里let的[x _]是在对param(一个序列类型,比如向量[1 2]或者列表'(a b))做解构:
- 把序列的第一个元素绑定到
x,后续会返回这个值; - 把序列的第二个元素绑定到
_,用这个占位符明确告诉阅读代码的人:“我知道这里有个值,但它对当前函数的逻辑没有作用,我不会去使用它”。
补充几个关键点
- 这只是约定而非语法强制:你完全可以用
unused这类名字代替_,但_是社区通用的写法,所有人看到都能立刻明白这个值是被刻意忽略的,可读性远高于自定义名字; - 支持多个占位符:如果需要跳过多个元素,你可以连续使用
_,比如(let [[x _ _ y] [1 2 3 4]] [x y]),会返回[1 4]; - 场景不止于let绑定:在匿名函数、解构参数等场景里,
_也有同样的作用,比如(map (fn [_] "忽略输入") [1 2 3]),表示不管输入的元素是什么,都返回固定字符串。
内容的提问来源于stack exchange,提问作者Oleksandr Golovatyi
相关产品推荐
相关产品推荐

