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

在Scala中,我可以(某些SIP允许我)仅指定泛型方法的某些类型参数

发布时间:2020-12-16 18:29:37 所属栏目:安全 来源:网络整理
导读:在 Scala中调用带有类型参数的方法时,我经常尝试安排代码,以便类型推断器可以找到关于类型参数的自己,而不需要我填写它们.在某些情况下,它失败了,我必须手动提供它们. 大多数情况下,这不是一个问题,但对于具有多个类型参数的方法(例如,大多数方法需要隐式Can
在 Scala中调用带有类型参数的方法时,我经常尝试安排代码,以便类型推断器可以找到关于类型参数的自己,而不需要我填写它们.在某些情况下,它失败了,我必须手动提供它们.

大多数情况下,这不是一个问题,但对于具有多个类型参数的方法(例如,大多数方法需要隐式CanBuildFrom),我想知道是否有一种方法可以帮助类型推理器只给它一个所需的输入参数,并要求它尝试猜测其他参数.它看起来像是在内部,它必须做这样的事情,因为它有时产生“预期类型A [B,?]但得到A [C,D]”形式的错误消息,这意味着两个类型参数A,它可以找到第一个B但没有关于第二个的信息.

使用案例:Tomasz’s question,其中此代码:

def firstAndLast[CC,A,That](seq: CC)(implicit asSeq: CC => Seq[A],cbf: CanBuildFrom[CC,That]): That = {
  val b = cbf(seq)
  b += seq.head
  b += seq.last
  b.result
}

无法使用List(“abc”,“def”)映射firstAndLast,但这可以工作:

List("abc","def") map firstAndLast[String,Char,String]

在这个例子中,我的问题归结为:有没有办法告诉类型推断器CC参数应该是String,并要求它自己找出A和那个?实质上,就像

List("abc","def") map firstAndLast[CC = String]

要么

List("abc",<guess>,<guess>]

我知道这些线条不起作用;我正在寻找一种解决方法(或指向未来语言功能的指针,这些功能已经讨论过,可能导致这种情况).

解决方法

不,你不能.有 type lambda并且自己键入类型(如类和特征),但不适用于类型参数.例如:

// Declaring a type alias
type StringMap[Elem] = Map[String,Elem]

// Calling an `def f[M[_]]` but passing a `Map`
f[({type l[A]=Map[String,A]})#l]

// note that f could also be called like this:
f[StringMap]

(编辑:李大同)

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

    推荐文章
      热点阅读