在Scala中键入Mismatch Unit和String

时间:2018-02-22 17:02:16

标签: scala list for-loop tuples list-comprehension

我试图从元组列表(例如Unit)中获取一些小于2的音节数之间的差异。

如果可以,我会退回 - 但是,我遇到了一些问题:我发现String并且预计会 def ecrire():String = { // Choose deux output: List[(Word, Word)] // I take every tuple of the list and proceed as the element "b" for (b <- choose_deux()){ val x = b._1 val y = b._2 val diff = Math.abs(x.syllabes - y.syllabes) // Check if difference between syllables is smaller than 2 if(diff <= 2) return x.toString() + "\n" + y.toString() } } }

type mismatch; found: Unit; required: String

现在我知道可能我必须在底部做一个收益率,但产生什么呢?这个想法是,如果条件显示在&#34; if&#34;受到尊重,我写了由这两个元素组成的字符串。

错误显示在for循环中:<Route path="/guide/:name/:id" component={pro}/>

你能帮我一下吗?我还是新人,还在学习!

1 个答案:

答案 0 :(得分:1)

类型不匹配错误是因为你的for循环没有else语句,如果在for循环中你不能返回。因此,循环不返回任何内容,因此scala编译器假定返回类型为(),即unit(),并且您已将返回类型定义为String。

以下列方式定义功能应解决您的问题

  def diff(x) = Math.abs(x._1.syllabes - x._2.syllabes)

  for (b <- choose_deux() if(diff(b) <= 2)) yield b._1.toString() + "\n" + b._2.toString()