在CoffeeScript中,我应该如何格式化一个带有匿名函数和其他参数的函数调用?

时间:2013-08-08 00:20:13

标签: formatting coffeescript code-formatting

这是我提出的一个人为的例子:

fn = (f, a, b, c)-> alert("#{f() + a + b + c}")

fn((-> "hi"), 1, 2, 3)

我想知道格式化最后一行的建议方法是什么?这个例子很容易理解,但想象一下,如果匿名函数((-> "hi"))是多行的并且有多个参数。这段代码会变得非常丑陋并开始看起来像lisp一样。

fn2 = (f, a, b, c)-> alert("#{f(1, 2) + a + b + c}")

fn2(((a, b) -> 
  c = a + b
  c), 1, 2, 3)

这可能会非常讨厌。有没有什么方法我应该格式化这段代码,使其更具可读性,或者是命名匿名函数的最佳建议?

我注意到一些类似的问题,询问如何做到这一点。这里的区别是我在问如何格式化它。

2 个答案:

答案 0 :(得分:2)

我看过这种风格曾经使用了几次:

fn2 (a, b) -> 
  a + b
, 1, 2, 3

例如,在setTimeout来电:

setTimeout ->
  alert '1 second has passed'
, 1000

但我认为通常最好将变量中的参数函数分开:

add = (a, b) -> 
  a + b
fn2 add, 1, 2, 3

或者,如果可以更改函数定义,请将函数参数设为最后一个:

fn2 1, 2, 3, (a, b) ->
  a + b

答案 1 :(得分:1)

在Coffeescript文档中,有一个函数参数last

的例子
task 'build:parser', 'rebuild the Jison parser', (options) ->
  require 'jison'
  code = require('./lib/grammar').parser.generate()
  dir  = options.output or 'lib'
  fs.writeFile "#{dir}/parser.js", code

Coffeescript测试文件有很多带有函数的示例

test "multiple semicolon-separated statements in parentheticals", ->
  nonce = {}
  eq nonce, (1; 2; nonce)
  eq nonce, (-> return (1; 2; nonce))()

当函数不是最后一个时,你需要更加简洁的缩进和逗号,或额外的括号来定义函数的边界。