【发布时间】:2013-01-15 20:27:26
【问题描述】:
柯里化函数很有用:
function tag(name, value) {
return '<' + name + '>' + value + '</' + name + '>';
}
var strong = tag.bind(undefined, "strong");
strong("text"); // <strong>text</strong>
现在假设我们必须使用另一个参数顺序错误的函数
function otherTag(value, name) {
return '<' + name + '>' + value + '</' + name + '>';
}
如何使用 bind 函数获得相同的结果 - 使用 otherTag 函数创建强标签。
如何仅使用 bind 对这个函数进行柯里化?
我对基于像这样包装 otherTag 函数的解决方案不感兴趣:
wrapOtherTag(name, value) {
return otherTag(value, name);
}
我想知道是否可以将参数传递给 bind 以告诉我们要柯里化的参数的顺序。
【问题讨论】:
-
不。参数按您传递它们的顺序绑定。您必须实施自己的解决方案。
-
@opengrid。如果您详细说明这可能有用的情况,您可能会更感兴趣。
-
@opengrid。附:您确定
currying是您所要求的正确术语吗? -
我不明白这一点。你想颠倒参数的顺序,但你想 bind 神奇地知道你希望它们的顺序是什么?为什么不使用对象:
{name:name, value:value}在这种情况下? -
Functional.js 库有一个函数可以让您执行此操作,尽管它主要用作学术示例。
标签: javascript ecmascript-5 partial-application