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