【发布时间】:2018-11-28 22:05:56
【问题描述】:
我希望在编译时检查数组大小是否兼容。
例如这里的 zip 和 transpose 是安全的,因为 a 和 b 的长度相同:
(a: Seq[Int]) => { val b=a.map(_+1); Seq(a,b).transpose }
而这是不安全的,因为如果 a 和 b 具有不同的维度,代码将在运行时终止:
(a: Seq[Int], b: Seq[Int]) => Seq(a,b).transpose
一般来说,如果我给一些代码提供参数的维度,通常可以确定代码中每个变量的维度,最后确定代码的结果。有时这种静态分析可能会立即显示错误,有时静态分析可能会警告一些假设,例如假设两个文件具有相同的长度,可以并且应该在运行时尽快检查的假设。这将使代码更可靠,所以我喜欢这样的检查。
我在谷歌上搜索过,发现了很多讨论,但没有实际的实现。
我希望这在编译时失败:
Seq(Seq(1,2,3),Seq(1,2)).transpose
我希望它发出一个编译器警告,如果 a 不是维度 [2],这将失败:
(a: Seq[Int]) => Seq(a, Seq(1,2)).transpose
我希望这个(或类似的)不发出编译器警告:
(a: Seq[Int]) => a.length match {
case 2 => Seq(a, Seq(1,2)).transpose
case _ => throw new Exception(s"a has the wrong dimension")
}
【问题讨论】:
标签: scala