scala - 为什么 Scala 中没有 i++?

标签 scala

我只是想知道为什么没有i++来增加一个数字。据我所知,Ruby 或 Python 等语言不支持它,因为它们是动态类型的。所以很明显我们不能编写像 i++ 这样的代码,因为 i 可能是一个字符串或其他东西。但 Scala 是静态类型的 - 编译器绝对可以推断将 ++ 放在变量后面是否合法。

那么,为什么 Scala 中不存在 i++ 呢?

最佳答案

Scala 没有 i++因为它是一种函数式语言,并且在函数式语言中,避免了有副作用的操作(在纯函数式语言中,根本不允许有任何副作用)。 i++的副作用是i现在比以前大 1。相反,您应该尝试使用不可变对象(immutable对象)(例如 val 而不是 var )。

此外,Scala 并不真正需要 i++因为它提供了控制流结构。在 Java 和其他语言中,您需要 i++经常构建whilefor迭代数组的循环。然而,在 Scala 中,你可以直接说出你的意思: for(x <- someArray)someArray.foreach或类似的规定。 i++在命令式编程中很有用,但是当你达到更高的水平时,它很少是必要的(在Python中,我从来没有发现自己需要它一次)。

你说得对++ 可以在Scala中,但这并不是因为它没有必要,而且只会阻塞语法。如果您确实需要它,请说 i += 1 ,但由于 Scala 更频繁地要求使用不可变和丰富的控制流进行编程,因此您应该很少需要这样做。您当然可以自己定义它,因为运算符实际上只是 Scala 中的方法。

关于scala - 为什么 Scala 中没有 i++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520463/

相关文章:

scala - 隐式值类的优雅分组

scala - 如何解释 SBT 错误消息

scala - 生成可能的组合

scala - Scala 的类型推断如何与类型边界一起工作?

scala - 为什么隐式转换在这里不起作用?

scala - 无法在Scala IDE中通过Gradle添加Scala swing依赖项

scala - 在 Scala 中将 Future[Future[(String,String)]] 转换为 Future[(String,String)] 用于理解

scala - 如何在 scala 中使用 lambda 创建 java Callable?

json - Apache Spark : Convert column with a JSON String to new Dataframe in Scala spark

scala - Spark Scala:无法导入sqlContext.implicits._