gpt4 book ai didi

scala - Scala 可以为数组长度提供类型安全吗?

转载 作者:行者123 更新时间:2023-12-02 02:53:20 26 4
gpt4 key购买 nike

我希望编译时检查数组大小是否兼容。

例如这里的 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 标准库没有这样的东西,你自己很难做到,但你可以使用 Shapeless这基本上是这样做的(有很多警告)。

关于scala - Scala 可以为数组长度提供类型安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com