gpt4 book ai didi

scala - 了解 `f: Int => _`

转载 作者:行者123 更新时间:2023-12-01 00:45:12 25 4
gpt4 key购买 nike

鉴于:

scala> def foo(x: Int)(f: Int => _) = ???
foo: (x: Int)(f: Function1[Int, _])Nothing
Function1[Int, _]是什么意思?

_存在主义?我怎么称呼它?

最佳答案

_是一种存在类型。特别是未绑定(bind)的通配符。没有任何限制,编译器只会将其推断为 Any , 但你可以传递任何函数 Function1[Int, A] ,因为唯一的约束是 A <: Any , 和 Function1A 上是协变的.

scala> def foo(x: Int)(f: Int => _) = f(x)
foo: (x: Int)(f: Function1[Int, _])Any

scala> def f(i: Int): Int = i
f: (i: Int)Int

scala> foo(1)(f)
res2: Any = 1

它有效,但 f 的结果是 Any ,这使得它不是很有用。

您可以为其添加一个上限,并将推断出该上限:
scala> def foo(x: Int)(f: Int => _ <: Int) = f(x)
foo: (x: Int)(f: Function1[Int, _ <: Int])Int

scala> foo(1)(f)
res6: Int = 1

我想这在您有一个具有相同参数类型但返回类型不完全相同的函数列表的情况下可能很有用?即 List[Function1[Int, _]] .不过,我从来没有真正遇到过这种东西的用途。

关于scala - 了解 `f: Int => _`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35071920/

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