ActionScript 3:curry 函数如何工作?

Posted

技术标签:

【中文标题】ActionScript 3:curry 函数如何工作?【英文标题】:ActionScript 3: How do curry functions work? 【发布时间】:2018-12-03 15:15:34 【问题描述】:

我最近才开始研究 ActionScript 代码(例如,我昨天才真正发现 ActionScript 是一个东西)。我唯一的经验是使用 Java,所以我不知道这段代码是如何工作的:

public static function curry(func:Function,...args):Function

    return function (...args2):*
        return func.apply(null,args.concat(args2));
    ;

我不明白星号在做什么,...args2 来自哪里(或它是什么),或者如何在 return 语句中包含 return 语句。等效的 Java 代码是什么? (即使比较复杂,我也能理解的好很多。)

【问题讨论】:

【参考方案1】:

ActionScript 与 javascript 有许多相似之处 - 但也提供了一个静态类型系统,因为它在 Java 中使用。 Java 缺乏的是对高阶函数的支持。函数,接受函数作为参数或返回函数或两者兼有。

curry 接受 Function 类型的参数和任意数量的附加参数(... 其余参数)。它返回一个Function,它也接受任意数量的参数。当这个函数被调用时,所有的参数都被连接起来并应用于初始函数。

// pseudo code
const f:Function = curry(function(o):*  o.join(', '); , 1, 2, 3);
const result:* = f(4, 5, 6);
trace(result); // [1, 2, 3, 4, 5, 6]

在 Java 中,将使用内部类或 Java 8 引入的 lambda 表达式。

【讨论】:

以上是关于ActionScript 3:curry 函数如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 3 的通用 curry 函数

你如何从 recompose 中读取这个 curry'd 函数……我的脑痛

ActionScript 3 如何访问父变量和函数

您如何在 F# 或任何函数式语言中对第二个(或第三个、第四个、...)参数进行 curry?

如何正确使用带有 react-redux 的 useSelector 钩子的 curried 选择器函数?

Groovy闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )