Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Generics Scala上限:值不是类型参数的成员_Generics_Scala_Bounds - Fatal编程技术网

Generics Scala上限:值不是类型参数的成员

Generics Scala上限:值不是类型参数的成员,generics,scala,bounds,Generics,Scala,Bounds,为什么价格不能在SeqValue上找到属性值?这似乎很简单,这是应该工作 我得到了错误 [error] .... value value is not a member of type parameter SeqValue [error] def recalc[SeqValue](input:SeqValue) = Price(1 + seq, input.value) 对于以下代码 sealed trait SeqValue { def seq:Int def val

为什么价格不能在SeqValue上找到属性值?这似乎很简单,这是应该工作

我得到了错误

[error]   .... value value is not a member of type parameter SeqValue
[error]   def recalc[SeqValue](input:SeqValue) = Price(1 + seq, input.value)    
对于以下代码

sealed trait SeqValue {
  def seq:Int
  def value:Float
  override def toString = ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE)
}

sealed trait Calc {
  type S <: SeqValue
  def recalc[S](input:S):SeqValue
}

case class Price(seq:Int=0, value:Float=.0f) extends SeqValue with Calc {
  def recalc[SeqValue](input:SeqValue) = Price(1 + seq, input.value)
}
SeqValue{
def seq:Int
def值:浮动
override def toString=ToStringBuilder.ReflectionString(这是ToStringStyle.SHORT_PREFIX_样式)
}
密封特性计算{

类型S在
Calc
中的类型成员
S
受到
recalc
方法的类型参数
S
的阴影

第二个错误:抽象类型
S
必须在class
Price
中定义

以下方面应起作用:

sealed trait SeqValue {
  def seq:Int
  def value:Float
  override def toString = ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE)
}

sealed trait Calc {
  type S <: SeqValue
  def recalc(input:S):SeqValue
}

case class Price(seq:Int=0, value:Float=.0f) extends SeqValue with Calc {
  type S = SeqValue
  def recalc(input:SeqValue) = Price(1 + seq, input.value)
}

Calc
中的类型成员
S
recalc
方法的类型参数
S
遮挡

第二个错误:抽象类型
S
必须在class
Price
中定义

以下方面应起作用:

sealed trait SeqValue {
  def seq:Int
  def value:Float
  override def toString = ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE)
}

sealed trait Calc {
  type S <: SeqValue
  def recalc(input:S):SeqValue
}

case class Price(seq:Int=0, value:Float=.0f) extends SeqValue with Calc {
  type S = SeqValue
  def recalc(input:SeqValue) = Price(1 + seq, input.value)
}

谢谢,它成功了!我有很多实现Calc的类。有没有办法重新定义类/特征,这样我就不必在每个类中添加type
S=SeqValue
实际上,它似乎不起作用
类价格需要是抽象的,因为方法recalc在[S]类型的特征Calc中(输入:S)com.quasiquant.SeqValue未定义[error]案例类价格(seq:Int=0,value:Float=.0f)使用Calc扩展SeqValue
@George,关于错误:您仍然使用
S
recalc
。我建议了其他方法。感谢您的帮助。我正在使用您建议的编辑代码,但是。
[error]/Users/gsward/Development/QuasiQuant/src/main/scala/com/QuasiQuant/SeqValue.scala:51:类价格需要抽象,因为[S](输入:S)com.QuasiQuant.SeqValue类型的trait Calc中的方法recalc没有定义[error]case类价格(seq:Int=0,value:Float=.0f)用SAsSeqValue扩展了SeqValue和Calc{
@George,我怀疑你正在运行我建议的代码。你的错误消息说你在方法
recalc
上有一个类型参数
S
,而我建议将其删除。谢谢它起作用了!我有很多类实现了Calc。有没有办法重新定义类/特征,这样我就不必添加类型
S=SeqValue在每个类中实际上,它似乎不起作用
类价格需要是抽象的,因为[S](输入:S)com.quasiquant.SeqValue类型的trait Calc中的方法recalc没有定义[error]case类价格(seq:Int=0,value:Float=.0f)使用Calc扩展SeqValue
@George,关于错误:您仍然使用
recalc
保留
S
。我建议使用其他方法。感谢您的帮助。我正在使用您建议的已编辑代码,但是。
[error]/Users/gsward/Development/QuasiQuant/src/main/scala/com/QuasiQuant/SeqValue.scala:51:类价格需要抽象,因为[S](输入:S)com.QuasiQuant.SeqValue类型的trait Calc中的方法recalc没有定义[error]case类价格(seq:Int=0,value:Float=.0f)用SAsSeqValue扩展了SeqValue和Calc{
@George,我怀疑你正在运行我建议的代码。你的错误消息说你在方法
recalc
上有一个类型参数
S
,而我建议将其删除。