0

我是 CoffeeScript 的新手,所以也许我的问题没有建设性。如果是这样,我很抱歉。无论如何,问题在于编写功能。我尝试了以下两种方法,但变量效果不佳。我该怎么写这个?

第一种方式:arg.foo

triangle = (arg...) ->
    if arg.base == undefined then arg.base = 1;
    if arg.height == undefined then arg.height = 1;
    arg.base * arg.height / 2

document.writeln triangle
    base:8
    height:5 # => return 0.5 ...

第二种方式:arg['foo']

triangle = (arg...) ->
    if arg['base'] == undefined then arg['base'] = 1;
    if arg['height'] == undefined then arg['height'] = 1;
    arg['base'] * arg['height'] / 2

document.writeln triangle
    base:8
    height:5 # => return 0.5 ...

谢谢你的好意。

4

2 回答 2

1

我借此机会提及其他一些细节:

您的第一次尝试arg...不起作用,因为...语法(称为splat)将采用剩余的参数并将它们放入 array arg

对默认参数的改进是:

triangle = (arg) ->
    arg.base ?= 1
    arg.height ?= 1

    arg.base * arg.height / 2

该构造?=使用存在运算符arg.base ?= 1并将分配1arg.baseiff arg.baseis nullor undefined

但它变得更好!Coffeescript 支持解构赋值,所以你可以这样写:

triangle = ({base, height}) ->
    base ?= 1
    height ?= 1

    base * height / 2

如果您愿意,可以使用 Coffeescript 的默认参数,如下所示:

triangle = ({base, height} = {base: 1, height: 2}) ->
    base * height / 2

但是,如果您只想指定or ,即如果 您将其称为,那将是,因此可能不是您想要的。baseheighttriangle(base: 3)heightundefined

于 2012-09-07T13:40:51.987 回答
0

很抱歉我找到了答案。我应该使用arg而不是arg....

triangle = (arg) ->
    if arg.base == undefined then arg.base = 1;
    if arg.height == undefined then arg.height = 1;
    arg.base * arg.height / 2

document.writeln triangle
    base:8
    height:5 # => return 20 !!!
于 2012-09-07T03:55:10.440 回答