gpt4 book ai didi

scala - 如何使用带有通用参数的结构类型?

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

我有两个案例课

case class StringCaseClass(argument: String)

case class IntCaseClass(argument: Int)

我想定义一个结构类型,以匹配这两个的伴随对象
type HasApply1 {
def apply[A, R](argument: A): R
}

这样可以很好地编译,但是当我尝试像这样使用它时
def method(caseClass: HasApply1) {
// whatever
}

method(StringCaseClass)

我会得到一个编译器错误
found   : StringCaseClass.type
required: WithApply1
(which expands to) AnyRef{def apply[A, R](string: A): R}

有什么办法可以做到这一点?如果我将结构类型重新定义为A和R的具体类型,它将正确编译,但是这样我就失去了灵活性

最佳答案

@aloiscochard的评论差不多在这里。他忘记提及的是,案例类伴随对象已经实现了适当的FunctionN特性,因此您可以轻松地做到这一点,

scala> case class StringCaseClass(argument: String)
defined class StringCaseClass

scala> case class IntCaseClass(argument: Int)
defined class IntCaseClass

scala> def method[A, R](caseClass: A => R, a: A) = caseClass(a)
method: [A, R](caseClass: A => R, a: A)R

scala> method(StringCaseClass, "foo")
res0: StringCaseClass = StringCaseClass(foo)

scala> method(IntCaseClass, 23)
res1: IntCaseClass = IntCaseClass(23)

关于scala - 如何使用带有通用参数的结构类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15598788/

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