- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以解释一下 Scala、Groovy 和 Clojure 之间的主要区别吗?我知道这些编译结果都可以在 JVM 上运行,但我想对它们进行简单的比较。
最佳答案
Groovy是一种动态类型语言,其语法与 Java 非常接近,并进行了许多语法改进,可以实现更轻的代码和更少的样板文件。它可以通过解释器运行并进行编译,这使得它非常适合快速原型(prototype)设计、脚本和学习动态语言,而无需学习新语法(假设您了解 Java)。从 Groovy 2.0 开始,它对 static compilation 的支持也越来越多。 Groovy 支持闭包,并且支持以某种函数式风格进行编程,尽管它距离函数式编程的传统定义还很远。
Clojure是 Lisp 的一种方言,具有一些高级功能,例如 Software Transactional Memory 。如果您喜欢 Lisp 并且希望在 JVM 下使用类似的东西,那么 Clojure 适合您。这可能是最多的functional language运行在 JVM 上,当然也是最著名的一个。此外,它更加强调 immutability比其他 Lisp 方言更接近函数式语言爱好者的心。
Scala是一种完全面向对象的语言,比 Java 更先进,具有最先进的之一 type systems可用于非研究语言,当然还有 JVM 上最先进的类型系统。它还结合了函数式语言的许多概念和特性,同时又不影响面向对象,但它对函数式语言特性的妥协让一些函数式语言的爱好者望而却步。
Groovy 具有良好的接受度,并且是 Grails 中流行的 Web 框架。它还为 Gradle 构建系统提供支持,该系统正在成为 Maven 的流行替代品。我个人认为这是一种实用性有限的语言,特别是与其他语言相比,Jython 和 JRuby 开始进军 JVM 领域。
Clojure,即使不考虑一些非常有趣的功能,仅仅作为 JVM 上的 Lisp 方言就具有强大的吸引力。当然,它可能会限制它的受欢迎程度,但我预计它会在很长一段时间内拥有忠实的社区。
Scala 可以直接与 Java 竞争,几乎在所有方面都可以与 Java 竞争。当然,它目前在受欢迎程度方面无法与之竞争,而且缺乏强大的企业支持可能会阻碍其在企业环境中的接受度。从语言的发展方式来看,它也是一种比 Java 更具动态性的语言。从语言的角度来看,这是一件好事。从计划在其中编写数千行代码的用户的角度来看,事实并非如此。
作为最后的披露,我非常熟悉 Scala,并且只熟悉其他两个。
关于Scala、Groovy、Clojure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1314732/
我有一些库脚本:lib1.groovy: def a(){ } lib2.groovy: def b(){ } lib3.groovy: def c(){ } 并想在其他脚本中使用它们:配置文件: a
我有下面的 Groovy 脚本,我需要将它放在集中式 Groovy 库中,然后从 Ready API 项目中的任何脚本访问 Groovy 中提到的类 路径 : D:\GroovyLib\com\Lin
看完后this link ,我想尝试Groovy++,但我有一个担心; Groovy 的所有语法在 Groovy++ 中都有效吗? 例如,我可以在 Groovy 中执行此操作: def list =
我在 Spring-boot 应用程序中混合了 Groovy 和 Java。休息 Controller 和数据访问是用 Groovy 编写的。配置主要使用Java。 根据 logback 文档,如果类
我已阅读how to simply import a groovy file in another groovy script 我想在一个 groovy 文件中定义常用函数,并从其他 groovy 文
你知道,我也知道,只要只有一个是公共(public)的,就可以用 Java 实现。但是,在 Groovy 中可以这样做吗?如果是的话,在什么条件下? 最佳答案 Java 和 Groovy 之间在可以放
~/groovy % tree . ├── lib │ ├── GTemplate.class │ └── GTemplate.groovy └── Simple.groovy class
给定一个具有属性和构造函数的对象,我希望将构造函数参数复制到属性中,然后在构造函数中做一些额外的工作。 import groovy.transform.TupleConstructor @TupleC
我会提前道歉,我是 groovy 的新手。我的问题是我有 3 个执行不同功能的 groovy 脚本,我需要从我的主 groovy 脚本中调用它们,使用脚本 1 的输出作为脚本 2 的输入和脚本 2 的
我想在静态闭包中存储一些属性,然后在方法调用期间访问它们: class Person { static someMap = { key1: "value1", key2: "value2" } }
Groovy 是否有安全范围运算符? 例如,如果我有, [1,2,3][0..10] Groovy 会抛出一个 java.lang.IndexOutOfBoundsException: 有没有索引安全
在 Groovy 中使用 Maps/JsonBuilder 处理一些翻译/映射功能。 是否有可能(无需在 map 文字创建之外创建额外的代码).. 有条件地包含/排除某些键/值对?一些事情沿着以下路线
不知道我是否正确询问,但是我有类似以下内容: def x = 1 if (x == 1) { def answer = "yes" } println answer 我收到错误
我不明白 groovy 打字是如何工作的。在 wikipedia据说它具有很强的类型,但我可以在解释器上完美地做到这一点: 1 + '1' ==> 11 所以也许我很困惑,我不明白弱类型是什么,但我想
我对函数式编程概念非常陌生,正在观看 Neil Ford 在 youtube 中的演讲。 .在那里他谈到了一个计数器来演示一段代码而不使用全局状态(在 20:04)。来自 Java 世界,我很难理解这
我有两个问题。 我执行以下代码来查找 $ 的 ASCII 值: def a = "\$" def b = (int)a println b //prints 36 好吧,我对答案很满意。但是当我尝试像
只是想知道 时髦 像这样与默认值进行值匹配的方法? if(params.max != 10 && params.max != 20 && params.max != 30){ params.m
我最近正在读《行动中的格鲁夫》。在第7章中,它介绍了*。运算符(operator) 。当我运行有关此运算符的代码时,我会遇到一些错误。 class Invoice {
是否有易于阅读的方法或一些聪明的方法来制作 combination Groovy 中的元素?我知道 Iterable#combinations或 GroovyCollections#combinati
最近我下载了 Groovy-2.3.6 并尝试在 Linux 系统上安装它。我按照 http://groovy-lang.org/install.html 的说明进行操作.我设置了我的 GROOVY_
我是一名优秀的程序员,十分优秀!