Scala 和依赖类型的类型检查

标签 scala testing typechecking

给定 java 类“抽象凭证”并派生“EmailPassword”/“OAuth”类。

和接口(interface) CredentialsStorage,具有适当的实现 EmailPasswordStorage 和 OAuthStorage

我需要创建某种具有三元组的数组:存储、有效凭证、无效凭证)

所以我从这个开始:

type T <: Credentials

type S <: CredentialsStorage[T]

private var testData: Array[(S, T, T)] = Array(
  (emailStorage, validEmailPasswd, new EmailPasswordCredentials("1", "2")),
  (oAuthStorage, validAuthToken, new OAuthCredentials("invalid auth token", OAuthService.FACEBOOK))
)

然而这并不能编译

error: type mismatch;
found   : storage.EmailPasswordStorage[credentials.EmailPassword]
required: CredentialsStorageTest.this.S
(emailStorage, validEmailPasswd, new EmailPasswordCredentials("1", "2")),

我该如何解决这个问题以及此处依赖/存在类型的正确定义是什么?

UPD 我通过元组类型本身的定义解决了这个问题:

type T[A] = (CredentialsStorage[A],A,A)

val testData : Array[T[_ <: Credentials]] = ...

最佳答案

type T <: Credentials定义一个抽象类型。你还没有定义什么 T在这种情况下。尝试包括 type T = credentials.EmailPasswordtype S = storage.EmailPasswordStorage[T] .

关于Scala 和依赖类型的类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13473692/

相关文章:

testing - 如何获得简单的 clojurescript 编译的直接结果?

haskell - Haskell 如何对无限递归值进行类型检查?

javascript - 在 Javascript 中确定对象类型的最佳实践

scala - 计算数据库调用所需时间的更好方法是什么?

scala - 从源代码构建 Scala 2.12 二进制文件

java - 使用 JUnitParamsRunner 对不同方法的 Mockito.verify() 进行参数化测试

scala - 继承和自递归类型推断

scala - 如何区分 def foo[A](xs : A*) and def foo[A, B](xs : (A, B)*)?

scala - 使用 shapeless 从案例类中提取数据,修改它,并重新创建案例类

android - 如何为 Android 的 appium 自动化编写测试套件