Java拟引入模式匹配直接断言并强制绑定?

22-03-26 banq

到目前为止,我们在语言中已经有两个上下文可以容纳模式:`instanceof`和`switch`。
这两个都是条件上下文,倍设计用于处理部分模式:测试一个模式是否匹配,如果匹配,有条件地提取一些状态并对其采取行动。

不过,在有些情况下,我们知道一个模式总是匹配的,在这种情况下 我们想让自己免于询问的仪式。
如果我们有一个三维的“点Point”对象,总是询问它是否是一个 "点Point "是多余的,而且会分散注意力。

```
Point p = ...
if (p instanceof Point(var x, var y, var z)) {
     // use x, y, z
}
```


在这种情况下,我们在问一个我们知道答案的问题,并且我们扭曲了我们的代码结构来做这件事。
此外,我们还在 剥夺了编译器愿意做的类型检查。
 

引入Let-bind语句
在这种情况下,我们要断言模式匹配,并且强行绑定它,也就是说我们宁愿直接以我们认定的模式去做,不用询问了。
我们已经试验了几种表达方式:
而最好的方法似乎是某种 "let "语句 

```
let Point(var x, var y, var z) p = ...;
// can use x, y, z, p
```

其他方式有用bind:

```
bind Point(var x, var y, var z) p = ...;
```


甚至不用引入关键字,直接普通使用即可:

```
Point(var x, var y, var z) p = ...;
```


 
`let`语句接收一个模式和一个表达式,我们静态地验证模式在表达式的类型上是穷尽的;
如果不是,在编译时就是一个类型错误。
任何出现在模式中的绑定都是肯定会被分配,并且在包含该块的其余部分的范围内 。

更多点击标题

猜你喜欢