Con*_*ski 6 lambda function coffeescript
大家好:假设我有一个函数"foo",它应该接收两个函数作为参数.如果我有两个lambda函数,我可以调用"foo"如下:
foo (-> 1),(-> 2)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"foo"接收两个函数,一个只返回1,另一个返回2.
但是,通常lambda函数更复杂,因此将两个函数放在一行上是不切实际的.相反,我想写两个多行lambda函数.但是,我无法弄清楚如何在coffeescript中实现这一点 - 理想情况下,我想写如下,但它会抛出一个错误:
foo
->
1
,
->
2
Run Code Online (Sandbox Code Playgroud)
我能想出的最好的作品是超级丑陋的:
foo.apply [
->
1
,
->
2
]
Run Code Online (Sandbox Code Playgroud)
任何Coffeescript大师都能告诉我如何做到这一点,而不会出现错误吗?谢谢!
我相信这是匿名函数似乎不是答案的一种情况.它们在很多情况下都是非常实用和惯用的,但即使它们有局限性,如果在极端情况下使用也会降低其可读性.
我将在变量中定义两个函数,然后将它们用作参数:
func1 = ->
x = 2
y = 3
z = x+y
return z+2*y
func2 = ->
a = "ok"
return a + " if you want this way"
foo func1, func2
Run Code Online (Sandbox Code Playgroud)
但是如果你决定lambdas会更好,只需在参数周围使用括号foo:
foo ((->
x = 2
y = 3
z = x+y
return z+2*y
),(->
a = "ok"
return a + " if you want this way"
)
)
Run Code Online (Sandbox Code Playgroud)
这不是因为你正在使用CoffeScript,你应该不惜一切代价避免使用括号:)
这应该足够了(你可以根据需要缩进第二个lamda):
f (->
x = 1
1 + 2 * x),
->
y = 2
2 * y
Run Code Online (Sandbox Code Playgroud)
给定函数f:
f = (a,b) -> a() + b()
Run Code Online (Sandbox Code Playgroud)
结果应该给3 + 4 = 7
| 归档时间: |
|
| 查看次数: |
4892 次 |
| 最近记录: |