関数に渡されるオブジェクトに、メソッドのコアセットを実装するよう要求する方法はありますか?関数パラメータを必要とするメソッドを実装する - Scala
たとえば、「+」演算子を実装するオブジェクトの任意の反復可能な部分を合計するsumメソッドを書くことができます。
trait addable[T <: addable[T]]{
def +(other: T): T
}
def sum[T <: addable[T]](items: Iterable[T]) =
if(items.isEmpty) throw new Exception("Can't sum nothing")
else items.tail.foldRight(items.head)(_+_)
//Starst with the first element and adds all other elements to it
今、このメソッドは動作しますが、それは不格好だが、次のように
私の最初の実装です。もし私が何かを合計できるようにしたいのであれば、数値型と文字列に対して明示的な変換を定義するのはもちろんのこと、合計したいすべてのクラスに明示的にaddable [T]を実装する必要があります。
このように見えるように実装する方法はありますか?
def sum[T fulfills addable[T]](items: Iterable[T]) =
if(items.isEmpty) throw new Exception("Can't sum nothing")
else items.tail.foldRight(items.head)(_+_)
代わりに、この必要性を除去し、いくつかの設計パタパタ(私が今やっていることは事実Adapterパターンより少しのようですが)ありますか?そのようなことを行うには
追加しようとしているものはなんですか? – Tyler
@Tylerの代わりに – cchantep
@Tylerを使用するのは、数値とベクトルの反復可能性を数学のベクトルと考える必要がありますが、同じ関数を他の場合にも使用したいので、必要なときに再利用できます。他のカスタムデータ型を合計します。 – CBlumey