Scala:'class needs to be abstract' 实现高阶函数时
Scala: 'class needs to be abstract' when implementing higher order function
我正在努力确保 classes(代表一些符号数学表达式)具有特征 Func
拥有一种方法,该方法将 return 一个数值函数(实现符号表达式).
trait Func {
def func[T](x: T): T=>Double
}
case class Const(d: Double) extends Func {
def func[T]: (T=>Double) = (x: T)=>d
}
object Main extends App {
val c = new Const(3.142)
val cAt1 = c.func(1.0)
println(s"c(1.0)=$cAt1") // expected: c(1.0)=3.142
}
这 return 是以下错误:
[error] /projects/tutdiff/diff.scala:6: class Const needs to be abstract, since method func in trait Func of type [T](x: T)T => Double is not defined
[error] case class Const(d: Double) extends Func {
[error] ^
我感兴趣的是为什么func
在Const
中的实现不符合要求。但也意味着 class 必须是抽象的或不是(Scala 的新手)。
编辑:====================
这是我马上要找的签名。
trait Func {
def func[T]: T=>Double
}
case class Const(d: Double) extends Func {
def func[T]: T=>Double = (x: T) => d
}
类型参数的使用 T
应该是后续问题的主题。
func
在 Func
中有签名:
def func[T](x: T): T => Double
在 Const
中,func
具有不同的签名:
def func[T]: (T => Double)
它不再接受 T
类型的参数。也许你想要的是:
def func[T](x: T): (T => Double) = (x: T) => d
虽然我不确定实际实现了什么。
我正在努力确保 classes(代表一些符号数学表达式)具有特征 Func
拥有一种方法,该方法将 return 一个数值函数(实现符号表达式).
trait Func {
def func[T](x: T): T=>Double
}
case class Const(d: Double) extends Func {
def func[T]: (T=>Double) = (x: T)=>d
}
object Main extends App {
val c = new Const(3.142)
val cAt1 = c.func(1.0)
println(s"c(1.0)=$cAt1") // expected: c(1.0)=3.142
}
这 return 是以下错误:
[error] /projects/tutdiff/diff.scala:6: class Const needs to be abstract, since method func in trait Func of type [T](x: T)T => Double is not defined
[error] case class Const(d: Double) extends Func {
[error] ^
我感兴趣的是为什么func
在Const
中的实现不符合要求。但也意味着 class 必须是抽象的或不是(Scala 的新手)。
编辑:====================
这是我马上要找的签名。
trait Func {
def func[T]: T=>Double
}
case class Const(d: Double) extends Func {
def func[T]: T=>Double = (x: T) => d
}
类型参数的使用 T
应该是后续问题的主题。
func
在 Func
中有签名:
def func[T](x: T): T => Double
在 Const
中,func
具有不同的签名:
def func[T]: (T => Double)
它不再接受 T
类型的参数。也许你想要的是:
def func[T](x: T): (T => Double) = (x: T) => d
虽然我不确定实际实现了什么。