2017-02-15 3 views
-1

Предположу, что у меня есть следующий код:Как я могу судить класс реализацию Заказа в Scala

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 с K:Ordering, так как при некоторых условиях, я не хочу этого , но как я могу использовать неявное упорядочение для типа K в MyProcess?

+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

Спасибо за ваш повтор, кажется, хорошо! Я просто удаляю упорядочение и использую '' 'asInstanceOf [Comparable [K]]' '' в классе '' 'MyProcess'''. Я буду искать вашу библиотеку позже. – Djvu

+0

У меня был успех с 'def myFunc() (implicit ord: Ordering [K] = null) = if (ord ne null) {...} else {...}' before. – Actorclavilis

Смежные вопросы