天天看點

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 元組解構指派