coffeescript中的模式匹配

dag*_*da1 13 coffeescript

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

{x, y} = sprite
css = {opacity, fontFamily}
Run Code Online (Sandbox Code Playgroud)

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

Tre*_*ham 19

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

CoffeeScript的模式匹配(更正式地称为"解构赋值",以区别于Erland和Scala中的模式匹配,这是完全不同的)可用于从非常精细的数据结构中提取信息.以下是官方文档中的一个示例:

{poet: {name, address: [street, city]}} = futurists
Run Code Online (Sandbox Code Playgroud)

这基本上相当于

poet = futurists.poet
name = poet.name
street = poet.address[0]
city = poet.address[1]
Run Code Online (Sandbox Code Playgroud)

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

[a, b] = [b, a]
Run Code Online (Sandbox Code Playgroud)

并且,使用splats,您可以arr通过写入获取数组的第一个和最后一个值

[first, middle..., last] = arr
Run Code Online (Sandbox Code Playgroud)

我希望有所帮助.我的书中有更多的例子,CoffeeScript:Accelerated JavaScript Development.