元组和入口解构

下一版的Ceylon具有一系列有趣的新语言功能,包括构造函数, ifswitch表达式, letobject表达式,以及元组和条目的解构 。 在这篇文章中,我将描述用于解构的新语法。

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

使用瘦箭头指示输入模式->我们用来构造条目:

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

元组模式用括号指示:

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

模式变量keyitemfirstsecond只是常规局部值。

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

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);

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值