【发布时间】:2022-12-11 11:17:16
【问题描述】:
我有一个特征定义,它在像这样实例化时包含副作用:
trait MyTrait[F[_]] {
def func1(param: Param): F[Param]
}
我的 Param 是一个案例类,它本身采用这样的类型参数:
final case class Param[F[_]] {
field1: F[String],
field2: F[Int]
)
现在我的问题是,如果我将特征方法签名更改为以下内容,这意味着什么:
trait MyTrait[F[_]] {
def func1(param: Param[_]): F[Param[_]]
}
如您所见,我在所有引用 Param 案例类的地方都使用了通配符。这是一个好方法吗?我不想将我的接口与方法参数上的类型期望联系起来。
【问题讨论】:
-
final case class Param[F[_]] { ... }是无效语法。F[Param]不是Param: (* -> *) -> *和F: * -> *的格式正确的类型。我不明白在问什么。做什么“这是个好办法吗?”意思是?接近什么?字体是否表达了你想表达的意思?如果是这样,那是正确的方法。如果没有,那就是错误的方法。不知道你想表达什么就不可能说。
标签: scala generics existential-type higher-kinded-types type-constructor