gpt4 book ai didi

scala - 具有两个通用参数的上下文范围

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

在Scala中,我可以使用上下文边界:

def sort[T : Ordered](t: Seq[T])

意思是:
def sort[T](t: Seq[T])(implicit def Ordered[T])

如果我有一个带有两个通用参数的类,该怎么办? IE。我希望能够确保我有一个 Writer[T, String]。有没有可以使用上下文范围( T : ...)的语法,还是我需要显式地包含隐式的(写起来很有趣)。

最佳答案

是的,有可能!但不是很漂亮:

trait Writer[T, O] {
def write(t: T): O
}

def writeToString[T: ({ type L[x] = Writer[x, String] })#L](t: T) =
implicitly[Writer[T, String]].write(t)

implicit object intToStringWriter extends Writer[Int, String] {
def write(t: Int) = t.toString
}

然后:
scala> writeToString(1)
res0: String = 1
({ type L[x] = Writer[x, String] })#L的事物称为 type lambda。有时它们非常方便(如果是 buggy),但这绝对不是那种情况。使用显式隐式更好。

关于scala - 具有两个通用参数的上下文范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20131589/

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