天天看点

python 元组解构赋值_元组和入口解构

python 元组解构赋值

下一版的Ceylon具有一系列有趣的新语言功能,包括构造函数,

if

switch

表达式,

let

object

表达式,以及对元组和条目的解构 。 在这篇文章中,我将描述用于解构的新语法。

解构语句看起来很像普通的值声明,只是我们希望看到值名称的地方出现了模式 。

使用瘦箭头指示输入模式

->

我们用来构造条目:

String->Integer entry = "one"->1;
value key->item = entry;    //destructure the Entry
           

元组模式用括号指示:

[String,Integer] pair = ["one",1];
value [first,second] = pair;    //destructure the Tuple
           

模式变量 ,

key

item

first

second

只是常规局部值。

我们可以嵌套元组和进入模式:

String->[String,Integer] entry = "one"->["one",1];
value key->[first,second] = entry;
           

元组模式可以具有尾部变量,用

*

表示:

[String+] ints = 1..100;
value [first,*rest] = ints;    //destructure the Sequence
           

(此语法类似于传播运算符。)

模式可以选择指示显式类型:

value String key->[String first, Integer second] = entry;
           

基于模式的解构可以在该语言的许多其他地方发生。 模式可以出现在

for

循环中:

if (exists index->item = stream.indexed.first) { ... }

if (nonempty [first,*rest] = sequence) { ... }
           

exists

或非

nonempty

情况下:

if (exists index->item = stream.indexed.first) { ... }

if (nonempty [first,*rest] = sequence) { ... }
           

或在

let

表达式中:

value dist = let ([x,y] = point) sqrt(x^2+y^2);
           

您可能想知道为什么我们决定引入这种语法,或者至少为什么我们现在决定采用这种语法。 好吧,我想简单的答案是:拥有元组但没有方便的解构语法的语言总会让人感到有些不完整或未完成。 尤其是当我们已经对条目进行了结构分解,但是在特殊情况下,仅在

for

for

了。

但是展望未来,您也可以选择在我们将脚趾浸入最终支持模式匹配的水中看到这一点。 我对模式匹配仍然持矛盾态度,当然我们并不是发现该语言缺少或需要这种语言,但是很多人告诉我们他们喜欢其他语言,因此我们一直保持开放态度。 幸运的是,上述语法将在完整的模式匹配工具中很好地扩展到更复杂的模式。

此功能已在github中实现并可用。

翻译自: https://www.javacodegeeks.com/2014/12/tuple-and-entry-destructuring.html

python 元组解构赋值