有什么方法可以强制执行返回某些内容的方法(以正则表达式表示):
(T with A) (T with A with B)+ (T with B)
如果我返回Traversable[T]
,它会丢弃绑定的特征。同样,我不能 return Traversable[T with A with B]
,因为这对于第一个和最后一个元素是不准确的。
我不知道如何解决这个问题。它在我的程序中引入了一些隐式条件,我觉得我正在通过使用.asInstanceOf[]
强制转换来滥用类型系统。也许我使用了错误的数据结构?
这是我正在编写的代码示例,作为我的意思的示例。我正在寻求执行该route
方法。该类User
扩展了 type T
,我省略了代码,因为有很多。
trait Producer extends User {
def send(file: Data)
}
trait Consumer extends User {
def receive(file: Data)
}
...
def route(sender: T with Producer, receiver: T with Consumer): Traversable[T]
def transfer(sender: T with Producer, receiver: T with Consumer, file: Data) {
val path = route(sender, receiver)
if (!path.isEmpty) {
sender send file
val nextHop = route(sender, receiver).tail.head
nextHop.asInstanceOf[T with Consumer] receive file
if (nextHop != receiver) {
transfer(nextHop.asInstanceOf[T with Producer], receiver, file)
}
}
}