Formatting 在CoffeeScript中,我应该如何格式化接受匿名函数和其他参数的函数调用?

Formatting 在CoffeeScript中,我应该如何格式化接受匿名函数和其他参数的函数调用?,formatting,coffeescript,code-formatting,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)

下面是我想出的一个人为的例子:

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)
这会变得很糟糕。是否有某种方式可以格式化此代码以使其更具可读性,或者是命名匿名函数的最佳建议


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

这种风格我见过好几次了:

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

在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测试文件中有很多函数last的示例

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

当函数不是最后一个时,您需要梅西耶缩进和逗号,或额外的括号来定义函数的边界。

同意,通常在node.js中,您会看到回调函数尾随,因此习惯于这样做是一种很好的做法。