language-features - [foo, bar] = ["foo", "bar"] 特征的名称是什么?

标签 language-features

我需要知道一些语言提供的这个很酷的特性的正确名称。

仅供引用:在某些语言中,可以通过将值结构分配给“变量”结构来进行多重分配。在问题标题的示例中,它将“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/

相关文章:

c++ - c从c++中得到了什么特性?

dart - 如何在 Dart 中进行惰性评估?

programming-languages - 寻找允许您更改真假的编程语言

php - 是好是坏?为 PHP 带来 "Function Chaining"功能

windows-xp - 如何从 cmd 中找到当前的 Windows 语言?

c# - ConditionalAttribute 和其他特殊类

.net - 冗余命名空间会产生任何开销吗

c++ - 在 C++ 中是否有更简单的表示条件的方法?

c++ - move 语义不完整吗?

c# - C#/CLI 标识符的最大长度是多少?