我尝试使用这个简短的代码片段,其中我试图使用精化库(https://github.com/fthomas/refined)中的正类型来约束Integer类型。
package xxx
import eu.timepit.refined._
import eu.timepit.refined.api.{Refined, Validate}
import eu.timepit.refined.auto._
import eu.timepit.refined.numeric._
import eu.timepit.refined.api.Refined
import eu.timepit.refined.numeric.Interval
object Lala {
type X = Integer Refined Positive
def lala(x: Int): Unit = {
val lala: X = refineV[X](x)
}
}在编译此代码段时,我会收到以下错误消息:
错误:(13,29)找不到参数v: eu.timepit.refined.api.ValidateInt,xxx.Lala.X val lala: X= refineVX的隐式值 错误:(13,29)方法应用的参数不足:(隐式v: eu.timepit.refined.api.ValidateInt,xxx.Lala.x)在RefinePartiallyApplied类中[String,eu.timepit.refined.api.RefinedInt,xxx.Lala.X]。未指定的值参数v. val lala: X= refineVX
其中似乎缺少了正类型的验证实现。我想知道是否有人能帮我找到一个正面类型的验证特性的实例?还是我应该自己提供这样的一个例子?
发布于 2016-12-14 20:38:21
快速查看精化自述中的类似示例将有助于解决您的问题:
import eu.timepit.refined._
import eu.timepit.refined.api.Refined
import eu.timepit.refined.auto._
import eu.timepit.refined.numeric._
// Int instead of Integer
type X = Int Refined Positive
// refineV returns an Either[String, SomeType Refined Tag]
// (and uses a Validate[SomeType, Tag])
def foo(x: Int): Either[String, X] = refineV[Positive](x)
foo(5) // Either[String,X] = Right(5)
foo(-1) // Either[String,X] = Left(Predicate failed: (-1 > 0).)https://stackoverflow.com/questions/41151348
复制相似问题