coffeescript中的模式匹配

时间:2011-09-16 11:46:34

标签: coffeescript

除了这些例子之外,我正在努力寻找任何好的咖啡和模式匹配的例子:

{x, y} = sprite
css = {opacity, fontFamily}

我在Erlang中使用过模式匹配,但我正在努力寻找coffeescript中的一些更高级的例子,这些例子说明了可能的内容。

2 个答案:

答案 0 :(得分:19)

啊,我以为我认出了这些例子:http://pragprog.com/magazines/2011-05/a-coffeescript-intervention:)

CoffeeScript的模式匹配(更正式地称为“解构赋值”,以区别于Erland和Scala中的模式匹配,这是完全不同的)可用于从非常精心设计的数据结构中提取信息。以下是official docs

的示例
{poet: {name, address: [street, city]}} = futurists

基本上等同于

poet = futurists.poet
name = poet.name
street = poet.address[0]
city = poet.address[1]

但实际上,解构赋值主要用于抓取一个或两个对象属性,如您提到的示例,或者用于从数组中获取零件。例如,您可以通过编写

来交换两个变量ab的值
[a, b] = [b, a]

并且,使用splats,您可以通过编写

来获取数组arr的第一个和最后一个值
[first, middle..., last] = arr

我希望有所帮助。我的书CoffeeScript: Accelerated JavaScript Development当然有更多的例子。

答案 1 :(得分:2)

有一个库提供了一种在没有预编译的情况下在coffeescript中编写类似Erlang的结构的方法,只需将其包装在特殊函数中。你可以在这里找到它:https://github.com/nogizhopaboroda/f_context