1

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

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

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

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

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

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

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

我注意到一些类似的问题,询问如何执行此操作。这里的区别是我在问如何格式化它。

4

2 回答 2

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
于 2013-08-08T00:39:33.380 回答
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 测试文件有很多带有函数 last 的示例

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

当函数不是最后的时候,你需要更混乱的缩进和逗号,或者额外的括号来定义函数的边界。

于 2013-08-08T01:08:44.670 回答