Coffeescript中的膨胀JS想要返回所有内容

Coffeescript中的膨胀JS想要返回所有内容,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) :

我这里有一个咖啡脚本:

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');
有什么建议吗?

这个怎么样

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');
var-brew,
__切片=[].slice;
brew=函数(){
var-args;
args=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');
var-brew,
__切片=[].slice;
brew=函数(){
var-args;

args=1如果不希望函数返回任何内容,请这样说:

brew = (args...) =>
  for e in args
    console.log e
  return
这样做的一个副作用是,
for
循环不会填充数组:CoffeeScript可以保证不会使用
for
循环表达式的结果,因此它不会费心计算它。请记住,一切都是CoffeeScript中的一个表达式,函数会返回上一个表达式的值,因此有时你必须加入显式的
return
s,以避免浪费时间去计算那些永远不会用到的东西

CoffeeScript循环的结果如下:

for (_i = 0, _len = args.length; _i < _len; _i++) {
  e = args[_i];
  console.log(e);
}
for(_i=0,_len=args.length;_i<_len;_i++){
e=args[_i];
控制台日志(e);
}
请注意,显式的“不返回任何内容”
return
会抑制所有的
\u结果
内容


您可以自己查看。

如果您不希望函数返回任何内容,请这样说:

brew = (args...) =>
  for e in args
    console.log e
  return
这样做的一个副作用是,
for
循环不会填充数组:CoffeeScript可以保证不会使用
for
循环表达式的结果,因此它不会费心计算它。请记住,一切都是CoffeeScript中的一个表达式,函数会返回上一个表达式的值,因此有时你必须加入显式的
return
s,以避免浪费时间去计算那些永远不会用到的东西

CoffeeScript循环的结果如下:

for (_i = 0, _len = args.length; _i < _len; _i++) {
  e = args[_i];
  console.log(e);
}
for(_i=0,_len=args.length;_i<_len;_i++){
e=args[_i];
控制台日志(e);
}
请注意,显式的“不返回任何内容”
return
会抑制所有的
\u结果
内容


你可以自己看。

我认为问题在于你没有明确表示你不想返回任何你应该返回的内容!就我个人而言,我不太喜欢CoffeeScript的“隐式返回”策略,但我也不喜欢我的函数返回任意/意外/混乱的值,所以我的策略是始终它使用
return null
来实现这些功能。当它有助于使代码更清晰时,不要害怕额外的一行!顺便说一句,你的
null
绝对应该被省略一步,它绝对不属于循环内部。@flow:return
return null
之间有区别。我不害怕我也喜欢隐式返回的东西,当然除了一行代码(
f=(x)->x*x
和类似的东西).我同意所有可选的东西都会让事情变得更难理解。我认为这里的问题是你没有明确表示你不想返回任何你应该返回的东西!就我个人而言,我不太喜欢CoffeeScript的“隐式返回”策略,但我不喜欢我的函数返回任意/意外/共n也使用值,因此我的策略是总是使用
返回null
退出此类函数。当它有助于使代码更清晰时,不要害怕额外的一行!而且,顺便说一句,您的
null
肯定应该超出一步,它肯定不属于循环内部。@flow:e> return
returnnull
。我也不太喜欢隐式return,当然除了一行代码(
f=(x)->x*x
和类似的东西)。我同意所有可选的东西都会让事情变得更难理解。这当然是可能的,但它是惯用的咖啡脚本吗?我更喜欢在args中为x编写
警报x
,并以
返回null
结束我的函数(见我上面的评论).这不是惯用的CoffeScript,但人们更能理解它,根据我的工作经验,同事们对你的例子和这个
run()if hasShoesOn()感到困惑
这当然是可能的,但这是惯用的咖啡脚本吗?我更喜欢在args中为x编写
警报x
,并以
返回null
结束我的函数(请参阅我上面的评论).这不是惯用的CoffeScript,但人们更能理解它,根据我的工作经验,同事们对你的例子和这个
run()if hasShoesOn()