如果返回类型固定为List[List[String]],需要做如下修改
到代码:
- 因为
someType._2被访问为someType._2(2),所以至少应该有
3 someType._2 列表中的字符串。
最后一个表达式必须是返回类型,即List[List[String]]。因为someType._2(1)
和someType._2(2) 只是字符串而不是List[String]:
List(someTuple._2,List(someTuple._2(1),someTuple._2(2))) 将是返回类型
List[List[String]]
“Some Word”的值将在递归过程中适当地改变
someTuple._2.size 始终是 >=3。
-
由于我们需要访问someType._2,并且它会在每次递归期间发生变化,
它在递归函数中被声明为var。
根据您的需求理解,以下代码可能是
你在找什么:
def someRecursiveFunction(listOfWords:List[String],sw: String):List[List[String]] = {
val textSplitter = listOfWords.lastIndexOf(sw)
var i =0
if(i==0) { var someTuple:(List[String],List[String]) = (List(),List()) }
if (textSplitter != -1 && listOfWords.size-3>=textSplitter) {
someTuple = listOfWords.splitAt(textSplitter)
println(someTuple._1,someTuple._2) // for checking recursion
if( someTuple._1.size>=3){ i+=1
someRecursiveFunction(someTuple._1,someTuple._1(textSplitter-3))}
}
List(someTuple._2,List(someTuple._2(1),someTuple._2(2))) // What I want back
}
在 Scala REPL 中:
val list = List("a","b","c","x","y","z","k","j","g","Some Word","d","e","f","u","m","p")
scala> val list = List("a","b","c","x","y","z","k","j","g","Some Word","d","e","f","u","m","p")
list: List[String] = List(a, b, c, x, y, z, k, j, g, Some Word, d, e, f, u, m, p)
scala> someRecursiveFunction(list,"d")
(List(a, b, c, x, y, z, k, j, g, Some Word),List(d, e, f, u, m, p))
(List(a, b, c, x, y, z, k),List(j, g, Some Word))
(List(a, b, c, x),List(y, z, k))
(List(a),List(b, c, x))
res70: List[List[String]] = List(List(b, c, x), List(c, x))
scala> someRecursiveFunction(list,"Some Word")
(List(a, b, c, x, y, z, k, j, g),List(Some Word, d, e, f, u, m, p))
(List(a, b, c, x, y, z),List(k, j, g))
(List(a, b, c),List(x, y, z))
(List(),List(a, b, c))
res71: List[List[String]] = List(List(a, b, c), List(b, c))