2016-12-31 63 views
-4

我有以下两种方法,如何将DocObObj中定义的方法调用到DistanceObj中?两个对象之间的调用方法SCALA

第一个目的是:

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 
+4

你为什么要调用'.asInstanceOf [List]'? 'Docs'已经返回一个'List [String]'。 –

+0

你不需要Scala中的'return',这是一个Java-ISM。它存在于Scala中,但您只能在特殊情况下使用它;它不会出现在普通的Scala代码中。除非你确定你需要它,否则就放弃它。 –

+1

您将'list1'定义为'List [String]',但您尝试分配一个'Set'。 – user7337271

回答

0

的问题是,该值你是试图分配到list1Set,但list1 VA r的类型是List

编译器错误将其解释为尽可能好,但也许错误信息有点模糊,因为赋值的右侧可能会采用多种类型(“多态表达式”),所以在“发现”行中错误消息是一系列类型,而不是单一类型。

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

相关问题