来自Coffeescript的臃肿的JS想要归还一切

时间:2013-09-19 15:34:44

标签: coffeescript

我在这里有这个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;

任何提示?

2 个答案:

答案 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');