繁体   English   中英

Scala和typecheck为依赖类型

[英]Scala and typecheck for dependent types

给定java类“抽象凭证”并导出“EmailPassword”/“OAuth”类。

和接口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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM