为什么scala中不建议使用while循环

时间:2018-03-29 09:48:51

标签: scala while-loop functional-programming

scala样式检查器表示如果您使用严格的功能样式 - http://www.scalastyle.org/rules-dev.html#org_scalastyle_scalariform_WhileChecker,则不推荐使用 while循环。 我找到了1个解决方案 - Is there any advantage to avoiding while loops in Scala? 这表示可变性将确保从长远来看,您将使用while模式引入错误。怎么会发生这种情况? 如果不可变性受到严格限制,为什么没有检查 for loop ? 我有一个简单的用例,我必须从最后出现的字符串中删除所有出现的子字符串。我可以找到一个解决方案,因为我使用循环。 示例 - 字符串是“IABCFGHUABCABC”,子字符串是“ABC”。字符串输出应该是“IABCFGHU”,其中删除了所有尾随出现的子字符串。 是否有任何非强制性和推荐的方法来使用scala解决此问题?

1 个答案:

答案 0 :(得分:4)

  

如果不可变性受到严格限制,为什么没有检查for循环?

因为与C风格的for循环不同,Scala for中没有可变性:

for (i <- <something>) {
  <body>
}

是编写方法调用<something>.foreach { i => <body> }的另一种方法。

  

是否有使用scala解决此问题的非强制性和推荐方法?

是的,当然。正如你所链接的问题所说,你可以使用尾递归。我不会提供代码,但想法是:如果字符串不以子字符串结尾,则返回它;如果是,删除该结尾并使用新参数再次调用该函数。您应该考虑为什么这最终会返回所需的结果。