I (nazik kullanıcı soc benim için formüle) aşağıdaki genel aralığı sınıfı vardır:Scala örtülü Sayısal [T] tamamlayıcı nesnesinde
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
}
Tipik kullanım durumları: [Çift] aralığı veya zaman aralığına [Uluslararası].
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)
}
}
Her iki yöntemleri içinde (implicit num: Numeric[T])
ve import num.mkOrderingOps
kopyalamak için çirkin demirbaş var: İkili birliği ve kavşak operatörleri eklemek için ben refakatçi nesnesinde (implicit num: Numeric[T])
ile benzer bir seyir izledi. Bunu, Interval nesnesinin kendisinin seviyesinde, sadece bir kez yapmanın bir yolu var mı?
Teşekkür ederim. Güzel kıskançlık. Bu bağlamla ilgili fikri hiç görmedim. Kim böyle şeyleri öğrenir? Scala'da bir kitap okudum ama bağlam sınırlarını hatırlamıyorum. –
Örneğin bkz. [Scala'da bağlamsal bağ nedir?] (Http://stackoverflow.com/questions/2982276/what-is-a-context-bound-in-scala). – Jesper