关于Scala语言最常见的误解是什么,以及对这些误解存在哪些反例?
更新
我更多地考虑了我所看到的各种说法,比如"Scala是动态类型的“和"Scala是一种脚本语言”。
我承认"Scala是简单的/复杂的“可能被认为是一个神话,但它也是一个非常依赖于上下文的观点。我个人认为,正是这些相同的特性可以让Scala看起来既简单又复杂,这取决于使用它们的人。归根结底,该语言只提供抽象,而正是这些抽象的使用方式塑造了感知。
不仅如此,它还有一定的激化争论的倾向,我还没有看到任何人改变对这个话题的强烈观点……
发布于 2010-10-16 07:09:27
迷思: Scala支持操作符重载。
实际上,Scala只是有非常灵活的方法命名规则和方法调用的中缀语法,当中缀语法与“操作符”一起使用时,有特殊的规则来确定方法的优先级。与真正的运算符重载(a la C++)相比,这种微妙的区别对于这种语言功能的实用性和滥用的可能性具有关键的影响,正如James Iry对this question的回答中更详细地解释的那样。
发布于 2010-10-14 01:54:16
我不同意Scala很难的观点,因为你可以使用非常高级的特性来做很难的事情。Scala的可伸缩性意味着您可以用Scala本身编写DSL抽象和高级API,否则就需要语言扩展。因此,为了公平起见,您需要将Scala库与其他语言编译器进行比较。人们不会说C#很难,因为(我假设,没有这方面的第一手知识) C#编译器是相当难以理解的。对于Scala来说,这一切都是公开的。但我们需要明确的是,大多数人不需要在这个层面上编写代码,也不应该这样做。
发布于 2010-10-14 04:36:12
有一种说法认为Scala很难,因为Scala是一种复杂的语言。
这是错误的--从各种指标来看,Scala并不比Java更复杂。(标准API中的语法大小、代码行或类的数量或方法的数量等)
但不可否认的是,Scala代码可能非常难以理解。如果Scala不是一种复杂的语言,这怎么可能呢?
答案是Scala是一种强大的语言。与Java不同的是,Java有许多特殊的构造(如枚举)来完成一件特定的事情,并且要求您学习专门的语法,这些语法只适用于这一件事,而Scala有各种非常通用的构造。通过混合和匹配这些结构,人们可以用很少的代码来表达非常复杂的想法。并且,不出所料,如果有人没有同样复杂的想法,并试图弄清楚您正在用这个非常紧凑的代码做什么,他们可能会发现这很可怕--甚至比他们看到几页代码做同样的事情更令人畏惧,因为从那时起,他们至少会意识到有多少概念上的东西需要理解!
还有一个问题是,事情是否比实际需要的更复杂。例如,集合库中存在的一些类型的体操使得集合的使用很有趣,但实现或扩展起来却令人困惑。这里的目标不是特别复杂(例如子类应该返回自己的类型),而是所需的方法(更高类型的类型,隐式构建器等)。是很复杂的。(如此复杂,实际上,Java只是放弃而不尝试,而不是像在Scala中那样“正确地”完成它。此外,原则上,这一点有希望在未来得到改善,因为该方法可以发展到更接近目标。)在其他情况下,目标是复杂的;list.filter(_<5).sorted.grouped(10).flatMap(_.tail.headOption)有点混乱,但如果你真的想取所有小于5的数字,然后取剩余列表中10个数字中的每2个数字,那么,这只是一个有点复杂的想法,如果你知道基本的集合操作,代码几乎说明了它的作用。
摘要: Scala并不复杂,但它允许您简洁地表达复杂的思想。紧凑地表达复杂的想法可能令人望而生畏。
有一种说法认为Scala是不可部署的,而许多第三方Java库可以毫不犹豫地部署。
就这个神话存在的程度而言,我怀疑它存在于那些不习惯将虚拟机和API与语言和编译器分开的人中。如果你的脑海中是java javac == Java API,那么如果有人建议使用scalac而不是javac,你可能会有点紧张,因为你会看到你的JVM运行得有多好。
Scala最终变成了JVM字节码,外加它自己的定制库。没有理由再担心小规模部署Scala或将其作为其他大型项目的一部分,因为部署任何其他库可能与您喜欢的任何JVM保持兼容,也可能不兼容。诚然,Scala开发团队没有Google集合或Apache Commons那么强大的支持,但它得到的支持至少与Java高级成像项目一样多。
https://stackoverflow.com/questions/3926047
复制相似问题