gpt4 book ai didi

scala - Type Bounds中的下划线(_)有特殊含义吗?

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

我正在尝试了解Scala的存在类型。

之间有什么区别:

def foo[X <: Bar] = 3


def foo[_ <: Bar] = 3

还是它们不仅仅是未命名的类型参数?

最佳答案

这里_确实只是一个未命名的类型参数,不多也不少。def foo[_ <: Bar] = 3def foo[X <: Bar] = 3在未使用X的情况下没有区别。

UPDATE :

回应:“我想不出一个未使用类型的用例,我将不胜感激”:

请注意,这几乎与询问是否不使用参数的目的相同,例如:

def foo( x: Int ) = 123

通常,这样做的一个很好的理由是该方法符合某些其他API中期望的形状。
例如,您想将方法(或更确切地说是eta-expansio)传递给另一个需要参数的方法。举例来说:
scala> List(1,2,3).map(foo)
res0: List[Int] = List(123, 123, 123)

另一种可能性是您的方法是重写:
trait A {
def foo( x: Int ): Int
}

trait B extends A {
def foo( x: Int ) = 123
}

同样的理由适用于类型参数。以示例为例:
trait A {
def foo[X <: Bar]: Int
}

trait B extends A {
def foo[_<:Bar] = 3
}
B.foo在其实现中不需要type参数,但它必须在该参数中(尽管未命名)以符合其覆盖的方法。

关于scala - Type Bounds中的下划线(_)有特殊含义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202714/

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