我需要知道一些语言提供的这个很酷的特性的正确名称。
仅供引用:在某些语言中,可以通过将值结构分配给“变量”结构来进行多重分配。在问题标题的示例中,它将“foo”分配给 foo,将“bar”分配给 bar。
最佳答案
它通常在函数式语言(没有赋值)中称为解构绑定(bind),在命令式语言中称为解构赋值。
一些语言提供了该功能的子集,然后将其称为不同的东西。例如,在 Python 中,它与元组、列表或序列一起工作,称为元组解包、列表解包或序列解包,在 Ruby 中,它与数组(或可转换为数组的对象)一起工作,称为并行赋值。
解构绑定(bind)可以变得任意复杂。例如。这个(假想的)绑定(bind)
[Integer(a), b, 2, c] = some_array
将分配
some_array
的第一个元素至a
,第二个元素到 b
和第四个元素到c
,但前提是第一个元素是 Integer
,第三个元素等于 2
长度为4。所以,这甚至包含了一些条件逻辑。解构绑定(bind)是更通用模式匹配的子集,它是 Haskell、ML、OCaml、F#、Erlang 和 Scala 等函数式语言的标准特性。不同之处在于解构绑定(bind)仅允许您拆分结构并将其组件绑定(bind)到变量,而模式匹配还匹配这些结构内的值并允许您做出决策,特别是允许您在绑定(bind)的上下文中运行任意代码。 (您可以将上述假想的绑定(bind)视为解构绑定(bind)和模式匹配之间的中途。)
这是
reverse
的经典示例用一种想象的语言编写的函数,使用模式匹配编写:def reverse(l: List): List {
match l {
when [] { return [] }
when [first :: rest] { return (reverse(rest) :: first) }
}
}
关于language-features - [foo, bar] = ["foo", "bar"] 特征的名称是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3951946/