加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

泛型 – Scala:如何使用长类型参数列表

发布时间:2020-12-16 19:20:54 所属栏目:安全 来源:网络整理
导读:我可以在 Scala中使用哪些技术来处理长类型参数列表? 我正在研究一个用于运行具有不同模拟环境的各种类型游戏的小框架.我试图保持框架的某些部分相对通用,所以我将各种类型作为类型参数引入,例如环境状态,游戏结果等. 它在功能上都运行良好,我确实获得了类
我可以在 Scala中使用哪些技术来处理长类型参数列表?

我正在研究一个用于运行具有不同模拟环境的各种类型游戏的小框架.我试图保持框架的某些部分相对通用,所以我将各种类型作为类型参数引入,例如环境状态,游戏结果等.

它在功能上都运行良好,我确实获得了类型安全但通用框架的预期好处.但是类型签名已经发展到使代码难以阅读和重构的程度,它变得非常繁琐.顶级Simulator的签名有八个类型参数,许多主要类型有三到五个.单个编译器类型错误,因为它们列出类或函数参数的类型(当然也是类型参数化)似乎经常运行到一百行.

偶尔,但很少,我可以省略类型参数,例如在构造函数上.但在大多数情况下,至少有一种类型不会被推断,所以我最终必须插入整个类型的签名.

显然这不是理想的,我正在寻找解决这个问题的方法.任何意见,将不胜感激!

解决方法

考虑具有一组密切相关的类型参数的情况;你把它们作为类型参数传递给它们.在此示例中,该组是A和B.

trait X[A,B,C] {
  new Y[A,Int] {}
}

trait Y[A,D] {
  def a: A = sys.error("")
}

您可以将这两种类型打包成一个类型参数,其类型别名包含类型成员:

type AB = { type A; type B }
trait Y[ab <: AB,D] {
  def a: ab#A = sys.error("")
}
trait X[ab <: AB,C] {
  new Y[ab,C] {}
}
new X[{ type A=Int; type B=Int},String] {}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读