【发布时间】:2026-02-06 03:20:12
【问题描述】:
从这里开始:下面的 sn-p 不能按预期工作:
['1', '2', '3'].map(parseInt) // [1, NaN, NaN] <- bad output
一个简单的改变就可以解决它:
['1', '2', '3'].map(a => parseInt(a)) // [ 1, 2, 3 ] <- good output
但我正在阅读的这个 book 有不同的补救措施:
创建一个unary 函数,它接受一个函数(在我们的例子中是parseInt),如果该函数有n 参数,它会返回一个只有一个参数的新函数。这本书是这样写的:
const unary = (f) => {
return f.length === 1 ? f : (args) => f(args)
}
['1', '2', '3'].map(unary(parseInt)) // [ 1, 2, 3 ] <- good output again!
我的问题是:
- 这个
unary函数是如何工作的? - 在任何实际场景中,此功能(或至少一般而言的此想法)会得到很好的使用?
任何帮助将不胜感激:)
未来读者注意:结帐currying
【问题讨论】:
-
由于目前尚不清楚
unary是指用于表示数值parseInt结果的一元数字系统还是回调函数的arity,我建议不要在实践中使用它。跨度> -
@le_m Unary functions 是函数式编程中广泛使用的概念。
parseInt用于此处的示例可能有点令人困惑,但我认为该名称没有任何问题。
标签: javascript higher-order-functions currying