scala值不是类型参数的成员
我试图掌握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
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
结果中减去乘法
结果,而在typeT
上毫无结果地查找该运算符
尝试将减号添加到类型类中:
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
结果中减去乘法
结果,而在typeT
上毫无结果地查找该运算符
尝试将减号添加到类型类中:
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
结果中减去乘法
结果,而在typeT
上毫无结果地查找该运算符
尝试将减号添加到类型类中:
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类,让您使用-
而不是减法