gpt4 book ai didi

scala - 由正确类型限制的类型构造函数

转载 作者:行者123 更新时间:2023-12-02 19:25:38 25 4
gpt4 key购买 nike

考虑以下类型参数子句 [F[_] <: Int]

def h[F[_] <: Int] = ???

其中类型构造函数 F受正确类型 Int 的限制。现在都是h[List]h[Int]是非法的

scala> def h[F[_] <: Int] = ???
|
def h[F[_] <: Int]: Nothing

scala> h[List]
^
error: type arguments [List] do not conform to method h's type parameter bounds [F[_] <: Int]

scala> h[Int]
^
error: Int takes no type parameters, expected: 1

那为什么是[F[_] <: Int]合法吗?

最佳答案

类型参数声明F[_] <: Int意味着 F 的每个实例 必须是 Int 的子类型。尽管有些神秘,但语法是正确的:F不必是 Int 的子类型; F[_]必须是 Int 的子类型(对于可能放置在 _ 中的所有类型)。此类 F 的一个示例总是返回 Int :

type ConstInt[X] = Int
h[ConstInt] // compiles

请注意,您可以在 _ 中命名类型。 。例如。我可以声明一个类型参数 F[X] <: XX是声明的本地变量,通过出现在 F 下定义左边,用作右边的边界,然后超出范围。此示例意味着 F[X]必须是 X 的子类型,例如如

def f[F[X] <: X] = ???
type Identity[X] = X
f[Identity] // works
type ConstNothing[X] = Nothing
f[ConstNothing] // works
// f[ConstInt] (ConstInt[X] = Int is not always a subtype of X; counterexample X = AnyRef)

也许这让我们明白了界限的含义。

关于scala - 由正确类型限制的类型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62439636/

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