普通英语的这个功能的解释是什么?

时间:2018-11-14 09:43:37

标签: scala

我正在尝试了解此拼写校正模块here。我坚持下面的函数定义:

def correct(word : String) = ((-1, word) /: candidates(word))(
  (max, word) => if(dict(word) > max._1) (dict(word), word) else max)._2

我将函数原型理解为def correct(word : String)接受String,但是鉴于我是Scala的初学者,因此右侧的表达非常令人困惑。

在右侧发生了什么,特别是使用foldLeft运算符/:时?另外,此表达式的返回类型是什么?

1 个答案:

答案 0 :(得分:2)

使用函数word,似乎在candidates列表中给定的dict: String => Int最大化。对于candidates列表中的每个单词,如果其得分大于先前保留的元素,则使用dict计算其得分。

如果我正确地进行了大脑编译,则返回类型应该为String

写起点的另一种方法是

candidates.foldLeft((-1, word))(...)

我实际上也回答了关于foldLeft/:的问题 How is foldLeft evaluated in (0 /: (1 to 6))(_+_)?

编辑: 例如您拥有word“ citi”和候选人city, citizen, exciting,而您的dict可能是levenshtein函数。