从 Refined 获取谓词
Getting predicate from Refined
是否可以在运行时从 Refined 变量的 predicate/witness 中提取边界?类似于以下内容。
// Should return L as a Double
def getLowerBound[L, H](v: Refined[Double, Interval.Closed[L, H]]): Double = ???
val v: Refined[Double, Interval.Closed[0.5, 1.0]] = 0.94
val lowerBound = getLowerBound(v)
lowerBound shouldBe 0.5
你可以使用类型绑定告诉编译器L
将是一个Double
,然后使用ValueOf
typeclass来提取文字类型的值;像这样:
def getLowerBound[L <: Double, H](v: Refined[Double, Interval.Closed[L, H]])
(implicit ev: ValueOf[L]): Double =
ev.value
可以看到代码运行 here.
是否可以在运行时从 Refined 变量的 predicate/witness 中提取边界?类似于以下内容。
// Should return L as a Double
def getLowerBound[L, H](v: Refined[Double, Interval.Closed[L, H]]): Double = ???
val v: Refined[Double, Interval.Closed[0.5, 1.0]] = 0.94
val lowerBound = getLowerBound(v)
lowerBound shouldBe 0.5
你可以使用类型绑定告诉编译器L
将是一个Double
,然后使用ValueOf
typeclass来提取文字类型的值;像这样:
def getLowerBound[L <: Double, H](v: Refined[Double, Interval.Closed[L, H]])
(implicit ev: ValueOf[L]): Double =
ev.value
可以看到代码运行 here.