2017-02-15 65 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