Scala类型不匹配的时候不应该?

时间:2017-11-23 12:04:28

标签: scala recursion

我在scala中有这两个函数:

def recursive_func(x: Position, count: Int) : Int = {
      if(getNewPositions(x).isEmpty){
        count + 1;
      } else {
        for(n <- getNewPositions(x)){
          recursive_func(n, count+1);
        }
      }
}

def getNewPositions(x: Position) : List[Position] = {
    val possible : List[Position] = List((x._1 + 5,x._2 + 6), (x._1 + 6,x._2 + 7), (x._1 + 7,x._2 + 8), (x._1 + 8, x._2 + 9));
    val answer : List[Position] = for (n <- possible if canMakeMove(n)) yield n;
    answer;
}

第二个返回有时为空的位置列表。第一个是递归函数,如果getNewPositions返回的列表为空,则返回1;如果列表不为,则返回迭代函数。但是我收到了这个错误:

error: type mismatch;
 found   : Unit
 required: Int

我认为是因为编译器试图在空列表上执行(n&lt; - getNewPositions(x)),即使在我的头脑中它不应该因为它包含在if语句中?我确信getNewPositions函数工作正常并返回相应的列表。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的代码中有2个错误:

  1. 首先:

    for(n <- getNewPositions(x)){ recursive_func(n, count+1); }

    此表达式的类型是单位(这会导致编译错误)。原因:for (n <- coll) {..}扩展为coll.foreach(n => {..})

  2. 第二:for (n <- possible canMakeMove(n)) yield {}绝对不是有效的scala语法