scala值不是类型参数的成员

scala值不是类型参数的成员,scala,typeclass,Scala,Typeclass,我试图掌握Scala特性和案例类的诀窍。下面是一个后续行动 假设我有一个简单的类和一个扩展它的对象 sealed trait Operations{ def add(a:Double,b:Double):Double def multiply(a:Double,b:Double):Double } case object CorrectOperations extends Operations{ def add(a:Double,b:Double):Double = a

我试图掌握Scala特性和案例类的诀窍。下面是一个后续行动

假设我有一个简单的类和一个扩展它的对象

sealed trait Operations{
    def add(a:Double,b:Double):Double
    def multiply(a:Double,b:Double):Double
}

case object CorrectOperations extends Operations{
    def add(a:Double,b:Double):Double = a+b
    def multiply(a:Double,b:Double):Double= a*b
}
现在我有了一些函数,可以使用任何类型的
操作
,例如

def doOperations(a:Double,b:Double, op:Operations)={ op.multiply(a,b) - op.add(a,b)}.
这很有效,但我的问题是如何概括trait
操作的类型,所以我们不仅仅讨论
双倍。所以我想为trait
操作创建泛型类型,然后为每个对象创建类型规范

使用类型泛型,我尝试了

sealed trait Operations[T]{
  def add(a:T,b:T):T
  def multiply(a:T,b:T):T
}

case object CorrectOperations extends Operations[Double]{
    def add(a:Double,b:Double):Double = a+b
    def multiply(a:Double,b:Double):Double= a*b
}

def doOperations[T](a:T,b:T, op:Operations[T])={ op.multiply(a,b) - op.add(a,b) },
doOperations
-“value-不是类型参数T的成员”处出现编译错误

因此我们知道
op.multiply(a,b)
将返回类型
T
,并且错误将指示类型
T
没有
-
方法


我应该如何考虑实现trait
操作的这种泛化?谢谢

在你的问题的背景下,你应该在你的
操作中引入
减法
方法,这样你就可以提供证据证明
T
有这样一种方法(当然它没有,但是一种从另一种方法减法到
T


这基本上就是trait所做的。

在你的问题背景下,你应该在你的
操作中引入
减法
trait,这样你就可以提供证据证明
T
有这样一种方法(当然它没有,但是一种从另一种方法减法到
T


这基本上就是trait所做的。

在你的问题背景下,你应该在你的
操作中引入
减法
trait,这样你就可以提供证据证明
T
有这样一种方法(当然它没有,但是一种从另一种方法减法到
T


这基本上就是trait所做的。

在你的问题背景下,你应该在你的
操作中引入
减法
trait,这样你就可以提供证据证明
T
有这样一种方法(当然它没有,但是一种从另一种方法减法到
T


这基本上就是trait所做的。

您遇到的问题是,您的type类中没有
-
(减号)操作来从
add
结果中减去
乘法
结果,而在
T
类型上毫无结果地查找该运算符

尝试将
减号添加到类型类中:

sealed trait Operations[T]{
  def add(a:T,b:T):T
  def multiply(a:T,b:T):T
  def minus(a:T,b:T):T
}

def doOperations[T](a:T,b:T, op:Operations[T])=
  op.minus(op.multiply(a,b) - op.add(a,b))

您遇到的问题是,在type类中没有
-
(减号)操作来从
add
结果中减去
乘法
结果,而在type
T
上毫无结果地查找该运算符

尝试将
减号添加到类型类中:

sealed trait Operations[T]{
  def add(a:T,b:T):T
  def multiply(a:T,b:T):T
  def minus(a:T,b:T):T
}

def doOperations[T](a:T,b:T, op:Operations[T])=
  op.minus(op.multiply(a,b) - op.add(a,b))

您遇到的问题是,在type类中没有
-
(减号)操作来从
add
结果中减去
乘法
结果,而在type
T
上毫无结果地查找该运算符

尝试将
减号添加到类型类中:

sealed trait Operations[T]{
  def add(a:T,b:T):T
  def multiply(a:T,b:T):T
  def minus(a:T,b:T):T
}

def doOperations[T](a:T,b:T, op:Operations[T])=
  op.minus(op.multiply(a,b) - op.add(a,b))

您遇到的问题是,在type类中没有
-
(减号)操作来从
add
结果中减去
乘法
结果,而在type
T
上毫无结果地查找该运算符

尝试将
减号添加到类型类中:

sealed trait Operations[T]{
  def add(a:T,b:T):T
  def multiply(a:T,b:T):T
  def minus(a:T,b:T):T
}

def doOperations[T](a:T,b:T, op:Operations[T])=
  op.minus(op.multiply(a,b) - op.add(a,b))

+1用于提及数字。另外,看看Numeric如何添加Ops类,让您使用
-
而不是
减去
+1来提及Numeric。另外,看看Numeric如何添加Ops类,让您使用
-
而不是
减去
+1来提及Numeric。另外,看看Numeric如何添加Ops类,让您使用
-
而不是
减去
+1来提及Numeric。另外,看看Numeric如何添加Ops类,让您使用
-
而不是
减法