私は(親切ユーザーSOCによって私のために処方)以下の一般的な間隔クラスがあります。Scalaの暗黙の数値[T]コンパニオンオブジェクトで
case class Interval[T](from: T, to: T)(implicit num: Numeric[T]) {
import num.mkNumericOps // allows us to write from.toDouble and to.toDouble
def mid: Double = (from.toDouble + to.toDouble)/2.0
}
典型的な使用例:[ダブル]区間または区間[のInt]を。
object Interval {
def union[T](interval1: Interval[T], interval2: Interval[T])(implicit num: Numeric[T]) = {
import num.mkOrderingOps // allows interval1.from min
Interval[T](interval1.from min interval2.from, interval1.to max interval2.to)
}
def intersect[T](interval1: Interval[T], interval2: Interval[T])(implicit num: Numeric[T]) = {
import num.mkOrderingOps
Interval[T](interval1.from max interval2.from, interval1.to min interval2.to)
}
}
それは両方の方法の内側(implicit num: Numeric[T])
とimport num.mkOrderingOps
をコピーする醜い定型だ:バイナリ組合と交差点演算子を追加するには、私はコンパニオンオブジェクトで(implicit num: Numeric[T])
と同様のパターンに従いました。 Intervalオブジェクト自体のレベルでこれを何度もやる方法がありますか? Interval
オブジェクトでNumeric
型クラスの
ありがとうございます。ニースの簡潔さ。私はこの文脈に縛られたアイデアを見たことがない誰がそのようなことを学びますか?私はScalaに関する本を読んだが、文脈の境界を思い出さない。 –
たとえば、「Scalaの「コンテキストバインド」とは何ですか?」(http://stackoverflow.com/questions/2982276/what-is-a-context-bound-in-scala)を参照してください。 – Jesper