[英]scalaz - type mismatch
I am facing 'type mismatch' issue, I tried more than two hours even not resolved because I am not good in scala. 我遇到“类型不匹配”的问题,我尝试了两个多小时,甚至没有解决,因为我在scala上并不擅长。
Using: Scala 2.11.7 使用: Scala 2.11.7
Error: 错误:
[error] AlertUUU.scala:297: type mismatch;
[error] found : scalaz.Validation StartTimeOverlap.type, OnPeakRange]
[error] required: scalaz.Validation[String,OnPeakRange]
[error] p.onPeakRanges.find(x ⇒ opr.startTime >= x.startTime && opr.startTime <= x.stopTime).map
(_.startTimeOverlap).getOrElse(opr.success) (_.startTimeOverlap).getOrElse(opr.success)
Code: 码:
def startTimeMustNotOverlap(p: UUUPeriod, opr: OnPeakRange): Validation[String, OnPeakRange] =
p.onPeakRanges.find(x ⇒ opr.startTime >= x.startTime && opr.startTime <= x.stopTime).map(_.startTimeOverlap).getOrElse(opr.success)
case class OnPeakRange(
startTime: Int,
stopTime: Int,
originalThreshold: Int) extends OnPeakRangeT with OnPeakRangeValidations {
def startTimeOverlap = OnPeakRange.StartTimeOverlap.failure
def stopTimeOverlap = OnPeakRange.StopTimeOverlap.failure
def allHoursPeakNotFullDay = OnPeakRange.AllHoursPeakNotFullDay.failure
}
case object StartTimeOverlap extends ValidationKey
trait ValidationKey {
def failNel = this.toString.failureNel
def nel = NonEmptyList(this.toString)
def fail = this.toString.failure
}
The error explains everything, startTimeMustNotOverlap
should return a Validation[String, OnPeakRange]
. 该错误说明了所有内容, startTimeMustNotOverlap
应该返回Validation[String, OnPeakRange]
。
Your Success
case is of type OnPeakRange
, your Failure
type is of case OnPeakRange.StartTimeOverlap
instead of a String
. 您的Success
案例的类型为OnPeakRange
,您的Failure
案例的类型为OnPeakRange.StartTimeOverlap
而不是String
。
You have to just change the type of startTimeOverlap
to String
or change the Validation
type. 您只需将startTimeOverlap
的类型更改为String
或更改Validation
类型。
def startTimeMustNotOverlap(p: Period, opr: OnPeakRange): Validation[String, OnPeakRange] =
p.onPeakRanges.find(
x => opr.startTime >= x.startTime && opr.startTime <= x.stopTime
).fold(opr.success[String])(_.startTimeOverlap)
case class Period(onPeakRanges: List[OnPeakRange] = Nil)
case class OnPeakRange(startTime: Int, stopTime: Int){
def startTimeOverlap = "...".failure
}
I changed 我变了
def startTimeOverlap = OnPeakRange.StartTimeOverlap.failure
to 至
def startTimeOverlap = OnPeakRange.StartTimeOverlap.fail
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.