我是CoffeeScript的新手,所以也许我的问题不具有建设性。如果是的话,我很抱歉。无论如何,问题是写功能。我尝试了两种方法如下,但变量不能很好地工作。我该怎么写呢?
第一种方式:arg.footriangle = (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 ...
谢谢你的善意。
答案 0 :(得分:1)
我借此机会提到其他一些细节:
arg...
的第一次尝试无效,因为...
语法(称为splat)将获取剩余的参数并将它们放入数组{{1 }}
默认参数的改进是:
arg
构建triangle = (arg) ->
arg.base ?= 1
arg.height ?= 1
arg.base * arg.height / 2
正在使用existential operator,而?=
会将arg.base ?= 1
分配给1
iff arg.base
为arg.base
或null
。
但它变得更好! Coffeescript支持destructuring assignment,所以你可以写:
undefined
如果您愿意,可以使用Coffeescript的默认参数:
triangle = ({base, height}) ->
base ?= 1
height ?= 1
base * height / 2
但是,如果您希望能够仅指定 triangle = ({base, height} = {base: 1, height: 2}) ->
base * height / 2
或base
,即如果您将其称为{{ {1}},height
将是triangle(base: 3)
,所以可能不是您想要的。
答案 1 :(得分: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 !!!