【问题标题】:Principle behind short callback function syntax短回调函数语法背后的原理
【发布时间】:2023-03-16 04:01:02
【问题描述】:

这背后的原理是什么? newArr.some(Array.isArray) === newArr.some(elem => Array.isArray(elem))

如何将它们解析为相等? 我认为newArr.some(Array.isArray) === newArr.some(Array.isArray())(假设some 是一个循环并且JS 假设每个val 都是func 的隐含arg),但事实并非如此。所以,我很困惑。请帮帮我。

这里,上面的案例有2个应用:


function flatMultiArr(arr) {
let newArr = [].concat(...arr);
return newArr.some(Array.isArray)
? flatMultiArr(newArr)
: newArr
}

console.log();//[ 1, {}, 3, 4 ]

function flatMultiArr(arr) {
let newArr = [].concat(...arr);
return newArr.some(elem => Array.isArray(elem))
? flatMultiArr(newArr)
: newArr
}

console.log();//[ 1, {}, 3, 4 ]

注意这个问题不是关于如何展平多维数组。

【问题讨论】:

  • .some 采用回调函数。你可以直接传入一个函数,或者将它包装在一个匿名函数中。这或多或少是一样的。 arr.some(e => (e => Array.isArray(e))(e)) 也有效——你可以无缘无故地继续添加间接层。
  • "我认为newArr.some(Array.isArray) === newArr.some(Array.isArray())" 不,绝对不是。 newArr.some(Array.isArray()) 根本没有传递回调,而是调用应该用作回调的函数的结果,这可能不起作用。回调是一个函数,所以需要传递函数,即Array.isArray,而不是调用函数的结果Array.isArray()

标签: javascript function functional-programming


【解决方案1】:

这个原则被称为eta conversion。不,它们不是“被解析为相等的”,它们是不同的函数,但它们表现相同,因此可以进行同等推理。为了简化:

const f = Array.isArray

function f(x) { return Array.isArray(x); }

调用1时会得到相同的结果,即f([])f(5)

1:一般来说,the this binding in the method 和参数数量有细微差别,但it works for Array.isArray

【讨论】:

  • 谢谢伯吉。我对微积分的参考很有用。我正在获得该领域的材料来改进我的函数式编程
【解决方案2】:

请注意,回调只是函数。它被称为 eta-abstraction,让你的函数更加懒惰:

const fix  = f =>      f(fix( f));
const fix_ = f => x => f(fix_(f)) (x);
//                ^^^^            ^^^ eta abstraction

try {
const map = fix(go => f => ([x, ...xs]) =>
    x == undefined
      ? []
      : go(f) (xs).concat(f(x)));
}

catch (e) {
  console.log(e.message);
}

const map_ = fix_(go => f => ([x, ...xs]) =>
    x === undefined
      ? []
      : [f(x)].concat(go(f) (xs)));

console.log(
  map_(x => x * x) ([1,2,3]));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多