【问题标题】:call method between two objects SCALA两个对象SCALA之间的调用方法
【发布时间】:2017-05-15 12:21:14
【问题描述】:

我有以下两种方法,如何将DocsObj中定义的方法调用到DistanceObj中?

第一个对象是:

object DocsObj{
     def Docs(s: List[String], b:Int): List[String] = { ... }
}

第二个是:

object Distance{
    def tanimoto(l1: List[String], l2: List[String]): Float={
        var list1= List[String]()
        list1=DocsObj.Docs(l1,6).asInstanceOf[List].toSet
    }
}

错误如下:

<console>:29: error: polymorphic expression cannot be instantiated to expected type;
found   : [B >: String]scala.collection.immutable.Set[B]
required: List[String]
   list1=DocsObj.Docs(list1,6).asInstanceOf[List[String]].toSet

【问题讨论】:

  • 你为什么打电话给.asInstanceOf[List]Docs 已经返回 List[String]
  • 在 Scala 中你不需要 return,它是一种 Java 主义。它存在于 Scala 中,但你只在特殊情况下使用它;它不会出现在普通的 Scala 代码中。除非你真的确定你需要它,否则不要管它。
  • 您将list1 定义为List[String],但您尝试分配Set

标签: scala object apache-spark error-handling large-data


【解决方案1】:

问题是您尝试分配给list1 的值是Set,但list1 var 的类型是List

编译器错误已尽其所能解释了这一点,但可能错误消息有点模糊,因为赋值的右侧可能采用多种类型(“多态表达式”),因此错误中的“找到”行message 是一系列类型,而不是单一类型。

尝试将list1 更改为Set[String] 类型或将toSet 调用更改为toList 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多