我正在尝试了解此拼写校正模块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
运算符/:
时?另外,此表达式的返回类型是什么?
答案 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函数。