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

Scala列表错误

发布时间:2020-12-16 10:03:43 所属栏目:安全 来源:网络整理
导读:经过大量的 Java和一些Haskell之后,我想看看Scala.从下面的代码,我收到此错误消息 类型不匹配;发现:列表[Nothing] =选项[无]需要:列表[Int] =选项[没什么] 我不知道我做错了什么: object MyFirstScalaObject { def main(args: Array[String]) { lazy val
经过大量的 Java和一些Haskell之后,我想看看Scala.从下面的代码,我收到此错误消息

类型不匹配;发现:列表[Nothing] =>选项[无]需要:列表[Int] =>选项[没什么]

我不知道我做错了什么:

object MyFirstScalaObject {

  def main(args: Array[String]) {
      lazy val testValues:List[List[Int]] = List((1 to 10).toList,null,List());

      println(  testFunction(last,testValues));
  }

  def testFunction[I,O](f : I => O,inputs : List[I]):
      List[(I,O)] = 
    inputs.zip(inputs.map(f));

  def last[A](xs:List[A]):Option[A] = xs match {
    case x::Nil => Some(x);
    case _::xs => last(xs);
    case _ => None;
  }

}

谢谢你的建议.

干杯,

解决方法

由于类型推断在scala中的工作方式,它无法确定最后的类型参数是什么,所以它必须采取过于保守的后退猜测它是Nothing.

您可以在调用testFunction时显式指定类型:

testFunction[List[Int],Option[Int](last,testValues)

或者您可以更全面地记录testFunction声明中类型参数之间的关系,这将为类型推理器提供更多信息:

def testFunction[A,I[_],O[_]](f : I[A] => O[A],inputs : List[I[A]]): List[(I[A],O[A])]

这明确地说I和O是类型构造函数(kind * – > *),现在f的输入/输出类型更具体,推理器可以正确地推断出最后一个函数的A参数必须是Int.

(编辑:李大同)

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

    推荐文章
      热点阅读