Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala中组合类型类?_Scala_Typeclass - Fatal编程技术网

如何在Scala中组合类型类?

如何在Scala中组合类型类?,scala,typeclass,Scala,Typeclass,我有如下代码: /** * A divisor that operates on real numbers. */ case class RealDivisor(divisor: Long) extends Divisor[Double, Double] with Divisor[Long, Double] // ... with Divisor[Int, Double], etc. { override def divide(dividend: Double): Do

我有如下代码:

/**
  * A divisor that operates on real numbers.
  */
case class RealDivisor(divisor: Long)
  extends Divisor[Double, Double]
  with Divisor[Long, Double] // ... with Divisor[Int, Double], etc.
  {

  override def divide(dividend: Double): Double =
    if (divisor != 0) dividend / divisor.toDouble else 0

  def divide(dividend: Long): Double = divide(dividend.toDouble)

}
case class RealDivisor(divisor: Long) extends Divisor[A: Numeric] {
  // ...
}
我更愿意做这样的事情:

/**
  * A divisor that operates on real numbers.
  */
case class RealDivisor(divisor: Long)
  extends Divisor[Double, Double]
  with Divisor[Long, Double] // ... with Divisor[Int, Double], etc.
  {

  override def divide(dividend: Double): Double =
    if (divisor != 0) dividend / divisor.toDouble else 0

  def divide(dividend: Long): Double = divide(dividend.toDouble)

}
case class RealDivisor(divisor: Long) extends Divisor[A: Numeric] {
  // ...
}

因此,我只需要实现一次
divide
方法。我该怎么做呢?

你想要的是一个


例如,
字段
类型类由提供。

数值
不会有多大帮助,因为它不实现除法。但是,如果您按照
Numeric
作为指导,您会发现这些实例中有许多不是免费提供的。你到底在找什么?将
Long
除以其他数值类型的功能,或将任何数值类型除以任何数值类型的功能?可能很有启发性。@MichaelZajac我希望能够将类型转换为
Double
,以便对其执行除法;这就是为什么我要使用
Numeric
。如果我的例子让人困惑的话,我很抱歉。我很肯定你是这样的,即使你不知道。真正的tao是字段和从/到您希望在除法之前/之后使用的数据类型的投影。我看到的是
抽象定义div(x:A,y:A):A
——这绝对不是我想要的。此外,尽管投影可能存在于
A
Long
,但它不存在于其他方面。