gpt4 book ai didi

scala - 在 Scala 中,泛型类型参数可以与 *function* 定义一起使用吗?

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

是否有允许函数文字上的泛型类型参数的语法?我知道我可以将其包装在以下方法中:

def createLongStringFunction[T](): (T) => Boolean = {
(obj: T) => obj.toString.length > 7
}

但后来我最终需要为每种类型 T 调用该方法并获得一个新函数。我查看了语言引用,虽然我看到编译器将函数文字语法转换为本身具有通用输入类型的 Functionn 对象的实例,但看起来编译器魔法在创建时实现了这些参数。实际上,我没有找到任何允许我“使 Functionn 的一个或多个类型参数未绑定(bind)”的语法。我更喜欢的是:
// doesn't compile
val longStringFunction: [T](T) => Boolean = (obj: T) => obj.toString.length > 7

有没有这样的事情存在?或者就此而言,当被扩展的方法具有泛型参数时,eta-expansion 函数的显式类型是什么?

这是一个纯粹人为且无用的示例。当然,我可以让函数在这里使用 Any 。

最佳答案

不,类型参数仅适用于方法而不适用于函数对象。例如,

def f[T](x: T) = x     //> f: [T](x: T)T
val g = f _ //> g: Nothing => Nothing = <function1>
// g(2) // error
val h: Int=>Int = f _ //> h : Int => Int = <function2>
h(2) //> res0: Int = 2

方法 f无法转换为多态函数对象 g .如您所见, g 的推断类型实际上是 Function1[Nothing, Nothing] ,这是没用的。然而,使用类型提示我们可以构造 h: Function1[Int,Int]Int 按预期工作争论。

关于scala - 在 Scala 中,泛型类型参数可以与 *function* 定义一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15264838/

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