2016-12-31 27 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呼叫。