【发布时间】:2018-05-31 13:07:40
【问题描述】:
我觉得大多数函数式语言,如 Kotlin 和 Scala,都倾向于将所有数据类型作为对象处理。
Double、Float、Long、Int.. 它们都是实际的对象,它们不提供任何原始替代方案?
为什么函数式语言偏爱对象? 仅仅是因为提供操作重载和多态更容易吗?或者这里面有什么更深层次的含义?
【问题讨论】:
-
A Kotlin Int 是 JVM int,原始类型
-
除了我在下面的回答之外,我想指出 Scala 本质上是一种面向对象的语言。事实上,它比 Java 更面向对象,而它对函数式编程的支持与 Java 大致相同。区别主要在于避免突变和副作用的库的设计。您可以通过在不更改语言的情况下替换其标准库来使 Java 具有同样的功能。
-
Scala 确实 提供原始的 Ints、Double、Longs 等,但它非常小心地将其隐藏起来,并在必要时在后台进行所有装箱拆箱。 @JörgWMittag 我对此有点怀疑:如果 Java 的类型系统不支持更高种类的类型构造函数,你将如何在 Java 中表达类似 monad 转换器的东西?
-
@AndreyTyukin:
scala.Int在 JVM 上编译为原语这一事实是一个实现细节。这本质上就是我在回答中要表达的观点:您可以拥有对象并有效地编译它们,而无需拆分它们。您无法在 Java 中表达 monad 转换器的类型,但这并不意味着您无法实现它们。你也不能表达Monad类型,但你仍然可以写单子。顺便说一句,我声称 Scala 不比 Java 更实用的说法是一种恭维。它看起来像它的事实,证明了 Odersky 在……方面的高品味。 -
Kotlin 不是函数式语言。
标签: scala functional-programming kotlin purely-functional