1

型消去を考えると、次のオーバーロード定義を解決するための最も効率的でエレガントな方法は何ですか。

trait Signal

trait Step[T] {
  def ar(implicit ev: T <:< Boolean): Signal
  def ar(implicit ev: T <:< Float  ): Signal
}

BooleanFloatパラメータ化に異なる名前を使用せずに?理想的にはそうなるでしょうがT <:< Boolean union Float、それは存在しません...余分な暗黙の間接参照なしで実行できますか?

4

1 に答える 1

4

追加の間接参照は次のようになります。

object Step {
  sealed trait SignalSource[T] { def toFloat(t: T): Float }
  implicit object BooleanSource extends SignalSource[Boolean] {
    def toFloat(t: Boolean) = if (t) 1f else 0f
  }
  implicit object FloatSource extends SignalSource[Float] {
    def toFloat(t: Float) = t
  }
}
trait Step[T] {
  def ar(implicit ev: Step.SignalSource[T]) : Signal
}
于 2012-09-05T11:08:29.090 に答える