- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从表面上看,Groovy 和 Scala 看起来非常相似,除了 Scala 是静态类型而 Groovy 是动态类型之外。
最佳答案
它们都是适用于 JVM 的面向对象语言,具有 lambda 表达式和闭包,并可与 Java 进行互操作。除此之外,它们非常不同。
Groovy 是一种“动态”语言,不仅是因为它是动态类型的,而且还支持动态元编程。
Scala 是一种“静态”语言,因为它是静态类型的,除了 Java 中可以做的尴尬的事情之外,几乎没有动态元编程。请注意,Scala 的静态类型系统比 Java 的静态类型系统更加统一和复杂。
Groovy 在语法上受到 Java 的影响,但在语义上更多地受到 Ruby 等语言的影响。
Scala 在语法上受到 Ruby 和 Java 的影响。它在语义上更多地受到 Java、SML、Haskell 和一种非常晦涩的 OO 语言(称为 gBeta)的影响。
由于 Groovy 处理 Java 重载的方式,它会出现“意外”的多重分派(dispatch)。
Scala 仅支持单调度,但具有受 SML 启发的模式匹配来处理多调度要处理的一些相同类型的问题。然而,多重分派(dispatch)只能分派(dispatch)运行时类型,而 Scala 的模式匹配可以分派(dispatch)运行时类型、值或两者。模式匹配还包括语法上令人愉快的变量绑定(bind)。很难过分强调这个功能本身就让 Scala 编程变得多么令人愉快。
Scala 和 Groovy 都支持使用 mixin 的多重继承形式(尽管 Scala 称它们为特征)。
Scala 在语言级别支持部分函数应用和柯里化(Currying),Groovy 有一种笨拙的“柯里化(Currying)”方法来进行部分函数应用。
Scala 进行直接尾递归优化。我不相信 Groovy 会这么做。这在函数式编程中很重要,但在命令式编程中不太重要。
默认情况下,Scala 和 Groovy 都会进行急切评估。但是,Scala 支持按名称调用参数。 Groovy 没有 - 按名称调用必须用闭包来模拟。
Scala 有“for 推导式”,这是其他语言中的列表推导式的概括(从技术上讲,它们是 monad 推导式加上一点 - 介于 Haskell 的 do 和 C# 的 LINQ 之间)。
Scala 没有“静态”字段、内部类、方法等概念 - 它使用单例对象。 Groovy 使用静态概念。
Scala 没有像 Groovy 那样内置算术运算符选择。在 Scala 中,您可以非常灵活地命名方法。
Groovy 有 elvis 运算符来处理 null。 Scala 程序员更喜欢使用 Option 类型而不是使用 null,但如果您愿意,在 Scala 中编写 elvis 运算符很容易。
最后,还有谎言,该死的谎言,然后是基准。计算机语言基准测试游戏将 Scala 评为比 Groovy 快很多(快两倍到 93 倍),同时保持大致相同的源代码大小。 benchmarks 。
我确信还有很多很多差异我没有提及。但希望这能给您一个要点。
他们之间有竞争吗?是的,当然,但没有你想象的那么多。 Groovy 的真正竞争对手是 JRuby 和 Jython。
谁会赢?我的 Crystal 球和其他人的一样破裂了。
关于scala - Scala 和 Groovy 之间的主要区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/711913/
我有一些库脚本: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_
我是一名优秀的程序员,十分优秀!