2017-02-15 41 views
-1

假設我有以下代碼:如何判斷類實現在斯卡拉訂購

class MyClass[K, V](val elements: Seq[(K, V)] { 
    def myFunc() = { 
     if (k is ordering) { 
     MyProcess[K, V](elements) 
     } else { 
     otherthing 
     } 
    } 
} 


class MyProcess[K: Ordering, V](val content: Seq[(K, V)]) { 
    // 
} 

我不想K:Ordering來約束K型,因爲有些情況下,我不希望這,但是如何在MyProcess中使用類型K的隱式排序?

+1

你能更多地討論你正在試圖做的是什麼邏輯?這聽起來像[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)給我。也許隨着更多的信息可以進一步分解你的問題,並使其更簡單。 –

回答

2

首先,這可能是一個壞主意。但如果你確定這是你需要的,那麼這是可能的。您必須要求可選隱含值Ordering[K]。但是,這不是開箱即用的。

免責聲明/警告:無恥的自我推銷了提前

最近我推開庫github上與一些隱含的分辨率技巧玩弄。它包含一個Optional typeclass,它可以做你正在尋找的東西。

使用它,你的代碼應該是這樣的:

import implicitlogic.Optional 

class MyClass[K, V](val elements: Seq[(K, V)]) { 
    def myFunc()(implicit opt: Optional[Ordering[K]]) = opt.result match { 
    case Some(ordering) => new MyProcess[K, V](elements)(ordering) 
    case None => otherthing 
    } 

    def otherthing = ??? 
} 

class MyProcess[K: Ordering, V](val content: Seq[(K, V)]) 
+0

感謝您的重播,看起來不錯! 我只是刪除了排序,並在MyProcess類中使用'''asInstanceOf [Comparable [K]]'''。 我會在稍後尋找你的圖書館。 – Djvu

+0

我已經成功使用過'def myFunc()(implicit ord:Ordering [K] = null)= if(ord ne null){...} else {...}'。 – Actorclavilis