- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我目前正在阅读 Mostly Adequate Guide on functional programming, chapter 2 .
这里给出了下面的例子
var getServerStuff = function(callback) {
return ajaxCall(function(json) {
return callback(json);
});
};
然后重构为:
var getServerStuff = ajaxCall;
在解释重构时,作者认为
return ajaxCall(function(json) {
return callback(json);
});
与
相同return ajaxCall(callback);
虽然我知道 ajaxCall
是用匿名函数的返回值调用的(这只是 callback
的返回值),但我不明白重构版本应该可以工作 - json
参数去哪儿了?我错过了什么?
最佳答案
问题已得到解答,但我认为一些粗体 和删除线 可以很容易地看到代码转换。希望这个答案可以帮助任何正在努力想象问题的人。
你不会写......
var floor = function(x) { return Math.floor(x) }
相反,你会写......
var floor = Math.floor
…它的工作原理完全一样†。这称为 Eta Conversion如果您重复两次,您将看到 Brian 如何在“最合适的指南”中得出他的结果。
Eta转换的基本规则是这样的:
<b>function(x) { return</b> f<b>(x) }</b> === f
……它们完全可以互换†
您可以在原始代码中使用相同的技术
var getServerStuff = function(callback) {
return ajaxCall(function(json) {
return callback(json)
})
}
先看看……
return ajaxCall(<b>function(json) { return</b> callback(<b>json</b>) <b>}</b>)
Eta 转换表示......
<b>function(json) { return</b> callback<b>(json) }</b> === callback
那么让我们看一下带有第一次 eta 转换结果的整个代码......
// first step
var getServerStuff = function(callback) {
return ajaxCall(<s>function(json) {</s>
<s>return </s>callback<s>(json)</s>
<s>}</s>)
}
// eta converts to ...
var getServerStuff = function(callback) {
return ajaxCall(callback)
}
我们应该觉得这种情况很熟悉。再进行一次 eta 转换将使我们得到最终的简化形式。我会再添加一次粗体,这样我们可以看得更清楚
Eta 转换表示......
<b>function(callback) { return</b> ajaxCall<b>(callback) }</b> === ajaxCall
// second step
var getServerStuff = <s>function(callback) {</s>
<s>return </s>ajaxCall<s>(callback)</s>
<s>}</s>
// eta converts to ...
var getServerStuff = ajaxCall
†无论出于何种意图和目的,它们都是可以互换的。 MoSTLy Adequate Guide to FP 很少关注动态绑定(bind)或使用 this
关于javascript - 这个例子中的论点在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38425893/
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: How to use R's ellipsis feature when writing your own func
当我尝试指定我想要 pull 最新版本的 pod 时,根据 Cocoapods official docs ,我将它列在我的 podfile 中,如下所示: pod 'ReactiveCocoa',
我是一名优秀的程序员,十分优秀!