[foo,bar] = ["foo","bar"]功能的名称是什么?

til*_*lda 13 language-features

我需要知道一些语言提供的这个很酷的功能的正确名称.

仅供参考:在某些语言中,可以通过为"变量"结构分配值结构来进行多项分配.在问题标题的示例中,它将"foo"分配给foo,将"bar"分配给bar.

Jör*_*tag 23

它通常被称为解构绑定在函数式语言(不具有分配)和解构赋值在命令式语言.

有些语言提供该功能的子集,然后将其称为不同的东西.例如,在Python中,它与元组,列表或序列一起使用,称为元组解包,列表解包序列解包,在Ruby中,它适用于数组(或可转换为数组的对象),称为并行赋值.

解构绑定可以任意复杂.例如这个(想象的)绑定

[Integer(a), b, 2, c] = some_array
Run Code Online (Sandbox Code Playgroud)

将分配的第一个元素some_array,以a向所述第二元件b和所述第四元件c,但只有当第一元件是Integer,第三元素等于2和长度为4.所以,这甚至结合一些条件逻辑.

解构绑定是更一般的模式匹配的子集,它是Haskell,ML,OCaml,F#,Erlang和Scala等函数语言的标准特性.不同之处在于,解构绑定只允许您拆分结构并将其组件绑定到变量,而模式匹配也匹配这些结构中的值,并允许您做出决策,特别是允许您在绑定的上下文中运行任意代码.(你可以在解构绑定和模式匹配之间看到上面的虚构绑定.)

以下是reverse使用模式匹配编写的虚构语言中的函数的经典示例:

def reverse(l: List): List {
  match l {
    when []              { return [] }
    when [first :: rest] { return (reverse(rest) :: first) }
  }
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*erg 6

在Python中,它被称为列表或序列解包:http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences

my_list = ["foo", "bar"]
foo, bar = my_list
Run Code Online (Sandbox Code Playgroud)