加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:22:41 所属栏目:安全 来源:网络整理
导读:有没有语法来允许函数文字上的泛型类型参数?我知道我可以用如下方法包装: def createLongStringFunction[T](): (T) = Boolean = { (obj: T) = obj.toString.length 7} 但是最后我需要调用每个类型T的方法并获得一个新的功能.我查看了语言参考,当我看到函数
有没有语法来允许函数文字上的泛型类型参数?我知道我可以用如下方法包装:

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

但是最后我需要调用每个类型T的方法并获得一个新的功能.我查看了语言参考,当我看到函数文字语法由编译器转换为一个本身具有通用输入类型的Functionn对象的一个??实例时,看起来编译器魔术会在创建时实现这些参数.我还没有发现任何语法允许我实际上“保留Functionn未绑定的一个或多个类型参数”.我最喜欢的是:

// doesn't compile
val longStringFunction: [T](T) => Boolean = (obj: T) => obj.toString.length > 7

有没有这样的事情存在?或者在这种情况下,当扩展方法具有通用参数时,eta扩展函数的显式类型是什么?

这是一个纯粹无价的例子.当然我可以使这个功能在这里使用.

解决方法

否,类型参数仅适用于方法而不适用于功能对象.例如,

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参数一样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读