这是我提出的一个人为的例子:
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)
这可能会非常讨厌。有没有什么方法我应该格式化这段代码,使其更具可读性,或者是命名匿名函数的最佳建议?
我注意到一些类似的问题,询问如何做到这一点。这里的区别是我在问如何格式化它。
答案 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))()
当函数不是最后一个时,你需要更加简洁的缩进和逗号,或额外的括号来定义函数的边界。