1
元素是否有什麼辦法可以強制執行的線沿線的一個方法返回的東西(在正則表達式表示法):類型檢查的集合與不同性狀
(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)
}
}
}
嗯......這不是一個壞主意。之所以我試圖將它們放在一個集合中,是因爲我希望它在每次調用route()時都更加透明。現在想想看,如果需要的話,我想我可以將元組變成「Traversable [T]」。 – 2012-04-20 20:35:06