(正規表現表記で)の線に沿って何かを返すメソッドを強制できる方法はありますか?
(T with A) (T with A with B)+ (T with B)
戻るTraversable[T]
と、バインドされた特性が削除されます。同様に、Traversable[T with A with B]
これは最初と最後の要素に対して不正確になるため、返すことはできません。
これを回避する方法がわかりません。.asInstanceOf[]
それは私のプログラムにいくつかの暗黙の条件を導入し、私はキャストを使用して型システムを悪用しているように感じます。たぶん私は間違った種類のデータ構造を使用していますか?
これが私が書いているコードのサンプルで、私が言っていることの例です。私はそのroute
方法を強制しようとしています。User
クラスはタイプを拡張します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)
}
}
}