Преобразование из java.util.ArrayList
в scala.collection.immutable.List
, то 2,10 компилятор и времени выполнения может показаться, что в несогласии, о типе val emits
:Различия типа Scala между компилятором и временем выполнения?
import org.ahocorasick.trie._
import scala.collection.JavaConverters._ // convert Java colllections to Scala ones
object wierd {
val trie = new Trie
def trieInit(patterns: List[String]) {
trie.onlyWholeWords();
for (pattern <- patterns)
trie.addKeyword(pattern)
}
def patternTest(text : String) : List[String] =
{
val emitsJ = trie.parseText(text)
val emits = emitsJ.asScala map (i => i.getKeyword)
println(s"converted from ${emitsJ.getClass} to ${emits.getClass}")
//return(emits)
return (List.empty[String])
}
trieInit(List("hello"))
patternTest("hello")
}
Урожайность:
converted from class java.util.ArrayList to class scala.collection.immutable.$colon$colon
Теперь меняющегося вернуться реальное значение путем изменения только линии return
-
import org.ahocorasick.trie._
import scala.collection.JavaConverters._ // convert Java colllections to Scala ones
object wierd {
val trie = new Trie
def trieInit(patterns: List[String]) {
trie.onlyWholeWords();
for (pattern <- patterns)
trie.addKeyword(pattern)
}
def patternTest(text : String) : List[String] =
{
val emitsJ = trie.parseText(text)
val emits = emitsJ.asScala map (i => i.getKeyword)
println(s"converted from ${emitsJ.getClass} to ${emits.getClass}")
return(emits)
//return (List.empty[String])
}
trieInit(List("hello"))
patternTest("hello")
}
Урожайность ошибку компиляции:
[error] reproduce.scala:23: type mismatch;
[error] found : Iterable[String]
[error] required: List[String]
[error] return(emits)
[error] ^
[error] one error found
[error] (compile:compile) Compilation failed
Что бы простое объяснение для этого? Как мне лучше подойти к конверсии?
Спасибо @ Nooah! Можете ли вы помочь мне соединить точки в точках - где именно во всех случаях это происходит вначале? – matanster
@matt Убивание происходит в начале, объект, который 'asScala' возвращает, опущен до' Iterable', так как вы не возвращаете тип 'JCollectionWrapper'. Из их шаблона «CanBuildFrom» сохраняется тип, переданный ему, поэтому он сохраняет «Iterable» вместо изменения в «List», даже если это то, что вы получаете. – Noah