gpt4 book ai didi

scala - 添加依赖于类型类的有效性检查(可选的隐式)

转载 作者:行者123 更新时间:2023-12-04 10:12:06 26 4
gpt4 key购买 nike

在 scala 中,我们可以使用隐式类型类有条件地将方法添加到依赖于该类型参数的参数化类型。例如,Iterator.sum :

def sum[B >: A](implicit num: Numeric[B]): B = foldLeft(num.zero)(num.plus)

必须有 Numeric 的实例甚至可以调用此方法的类型类:
scala> List(1, 2, 3).sum
res0: Int = 6

scala> List("a", "b").sum
<console>:6: error: could not find implicit value for parameter num: Numeric[java.lang.String]
List("a", "b").sum
^

到现在为止还挺好。假设我想要一些集合类型, My2Col :
class My2Col[A](a1 : A, a2 : A)

但我想强制要求, 如果 这是用 A : Numeric 制成的, 然后 a2 > a1 .但是,使用 A 制作它是完全有效的。这不是数字。
My2Col("a", "b") //OK
My2Col("b", "a") //OK
My2Col(1, 2) //OK
My2Col(2, 1) //THROW IllegalArgumentException

有没有人对我如何做到这一点有任何想法?

附注。如果有人对更好的问题标题有任何建议,我会全神贯注

最佳答案

class My2Col[A](a1 : A, a2 : A)(implicit num: Numeric[A] = null){
for{check <- Option(num); if(check.gteq(a1, a2))}
throw new IllegalArgumentException
}

关于scala - 添加依赖于类型类的有效性检查(可选的隐式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4364601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com