问题标签 [partial-application]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
17 回答
44918 浏览

javascript - JavaScript curry:有哪些实际应用?

我想我还没学会咖喱。我明白它的作用,以及如何去做。我只是想不出我会使用它的情况。

你在哪里使用 JavaScript 中的柯里化(或者主要库在哪里使用它)?欢迎使用 DOM 操作或一般应用程序开发示例。

其中一个答案提到了动画。类似的函数slideUpfadeIn将元素作为参数,通常是一个柯里化函数,返回内置默认“动画函数”的高阶函数。为什么这比仅仅应用带有一些默认值的更高层函数更好?

使用它有什么缺点吗?

根据这里的要求,有一些关于 JavaScript currying 的好资源:

当他们在评论中出现时,我会添加更多内容。


因此,根据答案,一般来说,柯里化和部分应用是便利技术。

如果您经常通过使用相同配置调用高级函数来“优化”高级函数,则可以对高级函数进行 curry(或使用 Resig 的部分)来创建简单、简洁的辅助方法。

0 投票
15 回答
59220 浏览

language-agnostic - 柯里化和部分应用有什么区别?

我经常在网上看到各种各样的抱怨,说别人的柯里化例子不是柯里化,实际上只是部分应用。

对于什么是部分应用程序,或者它与柯里化有何不同,我还没有找到一个体面的解释。似乎存在一种普遍的混淆,等效的例子在某些地方被描述为柯里化,而在其他地方则被描述为部分应用。

有人可以为我提供这两个术语的定义,以及它们之间的区别细节吗?

0 投票
7 回答
29569 浏览

python - Python 参数绑定器

如何将参数绑定到 Python 方法以存储空函子以供以后调用?类似于 C++ 的boost::bind.

例如:

0 投票
3 回答
2287 浏览

f# - F# 将带参数的运算符传递给函数

您能否仅使用部分应用的运算符传入“除以 2”或“减 1”之类的运算,其中“加 1”如下所示:

发生的事情是 1 作为第一个参数应用于 (+),而列表项作为第二个参数应用。对于加法和乘法,此参数排序无关紧要。

假设我想从每个元素中减去 1(这可能是初学者的常见错误):

1 应用于 (-) 作为它的第一个参数,所以(list_item - 1)我得到. 而不是(1 - list_item). 我可以将其重写为添加负数而不是减去正数:

我正在寻找一种更具表现力的方式来编写它,例如((-) _ 1),其中_表示占位符,就像在 Arc 语言中一样。这将导致1成为 的第二个参数-,因此在 List.map 中,它将评估为list_item - 1。所以如果你想映射divide by 2到列表,你可以写:

可以这样做还是我必须使用(fun x -> x/2)?似乎最接近占位符语法的方法是使用带有命名参数的 lambda。

0 投票
1 回答
3125 浏览

scala - 为什么以及何时需要在方法名称后面加上 _?

_关于何时需要使用after 方法将其用作函数的规则,我有点摇摆不定。Foo例如,为什么下面的's 和Nil's有区别::

0 投票
2 回答
1111 浏览

scala - 什么时候scala偏函数不是偏函数?

在创建 String 到部分函数的映射时,我遇到了意外行为。当我创建一个部分函数作为地图元素时,它工作正常。当我分配给一个 val 时,它会调用它。尝试调用检查会产生错误。这是预期的吗?我在做傻事吗?注释掉check()以查看调用。我正在使用 scala 2.7.7

0 投票
1 回答
330 浏览

scala - 部分应用的递归函数

如何将 foo 编写为部分应用的函数,我不必在每个递归调用中传递名称而只需调用foo(map1)

0 投票
6 回答
57748 浏览

python - Python:为什么需要 functools.partial?

部分应用很酷。提供了哪些functools.partial您无法通过 lambdas 获得的功能?

functools以某种方式更有效,还是更易读?

0 投票
2 回答
340 浏览

scala - 提升请求对象

在 liftbook 中,有一个使用 apply 创建 Req 实例的示例:

但是当我查看 api 文档时,有两个 apply() 方法,但我不知道在这个例子中是哪一个以及如何运行。

另外,有没有办法,如何包含/a/b/a/b/c请求一个case

另外,有没有办法,如何在一个中枚举所有可能的请求case:guess case Req(List("api", "expense", eid), "", {GetRequest,PostRequest}):?

谢谢回答。

0 投票
3 回答
2030 浏览

haskell - Haskell - 柯里化?需要进一步解释

所以像

为什么这行得通?咖喱部分。为什么没有变量?