gpt4 book ai didi

grails - Groovy 中的编译时检查

转载 作者:行者123 更新时间:2023-12-02 06:41:18 30 4
gpt4 key购买 nike

在 Groovy 中类型是可选的,因此您可以使用:

String foo = "foo"
foo.noSuchMethod()

def foo = "foo"
foo.noSuchMethod()

我假设第一个示例会生成编译时错误,而第二个示例只会在运行时失败。然而,情况似乎并非如此。根据我的经验,这两种情况都不会生成编译时错误。

我是否正确地假设声明引用类型的唯一好处是作为文档的形式,即向其他程序员传达意图。例如,如果我编写一个方法,例如:

def capitalize(String arg) {
return arg.toUpperCase()
}

这比以下方式更有效地传达应传递给函数的参数类型:

def capitalize(def arg) {
return arg.toUpperCase()
}

指定类型时,Groovy 编译器是否执行任何类型检查?

谢谢,唐

最佳答案

[编辑]较新版本的 Groovy 确实允许编译时静态类型检查。使用此注释的代码比常规运行时 Groovy 更快,因为跳过了许多动态检查。

正如 Cesar 所说,类型检查是一个运行时过程,这是 Groovy 比 Java 慢的主要原因之一(并不是说这很糟糕)。

你应该明白这是为什么吧?鉴于 Groovy 的动态特性,几乎不可能判断 String 是否已在代码中的其他位置扩展以包含 noSuchMethod() 方法。成员类型检查也是如此,因为完全可以删除一种类型的成员,并稍后在代码中添加具有相同名称的另一种类型的成员。这可能不常见,但很有可能。

问题是,您真正需要多少类型检查?当您调用该方法时,您确实应该知道它需要哪些参数,或者该方法是否确实存在。使用编译时检查来节省查找时间并不是编译器的核心用处。

关于grails - Groovy 中的编译时检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/946396/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com