我在这里有这个Coffeescript:
brew = (args...) =>
for e in args
alert e
null
brew('fo', 're', 'eo');
我希望我不需要在那里放置null来使其工作,但唉,编译到这个:
brew = function() {
var args, e, _i, _len, _results;
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
_results = [];
for (_i = 0, _len = args.length; _i < _len; _i++) {
e = args[_i];
alert(e);
_results.push(null);
}
return _results;
};
brew('fo', 're', 'eo');
但现在我有3条不必要的行:
_results = [];
_results.push(null);
return _results;
任何提示?
答案 0 :(得分:5)
如果您不希望函数返回任何内容,请说明:
brew = (args...) =>
for e in args
console.log e
return
副作用是for
循环不会填充数组:CoffeeScript可以保证for
循环表达式的结果不会被使用,所以它不打算计算它。请记住,CoffeeScript中的所有内容都是表达式,函数返回其最后一个表达式的值,因此有时您必须抛出显式return
以避免浪费时间来计算永远不会被使用的内容。
CoffeeScript循环最终如下:
for (_i = 0, _len = args.length; _i < _len; _i++) {
e = args[_i];
console.log(e);
}
请注意,显式&#34;不返回&#34; return
会抑制所有_result
内容。
您可以自己查看over here。
答案 1 :(得分:1)
这个怎么样?
brew = (args...) -> args.forEach alert
编译为
var brew,
__slice = [].slice;
brew = function() {
var args;
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
return args.forEach(alert);
};
brew('fo', 're', 'eo');