gpt4 book ai didi

grails - 如何使用@GrailsTypeChecked和@GrailsCompileStatic

转载 作者:行者123 更新时间:2023-12-02 04:35:27 25 4
gpt4 key购买 nike

我有兴趣阅读 Grails 中的新注释,理论上它应该提供运行时性能改进,同时仍然允许动态调度,但它似乎没有效果。我错过了什么?

class MyService {

@GrailsTypeChecked // or @GrailsCompileStatic
def doSomething() {
String name = missingVariable
}
}

grails> clean
| Application cleaned.
grails> compile
| Compiling 1 source files.....

一切都可以编译,但在运行时会崩溃?我一定错过了一些东西,因为我真的不明白这些新注释是如何工作的。编译器如何能够确定什么是错误调用以及什么是可以忽略的错误调用(即动态查找器)?

我使用的是 Grails 2.5.0

最佳答案

该代码不应编译。我构建了一个简单的应用程序并将您的代码直接粘贴到该应用程序中,但该代码无法为我编译。请参阅https://github.com/jeffbrown/grailscompilestatic .

| Compiling 8 source files
[groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
[groovyc] /Users/jeff/t/grailscompilestatic/grails- app/services/demo/MyService.groovy: 9: [Static type checking] - The variable [missingVariable] is undeclared.
[groovyc] @ line 9, column 19.
[groovyc] String name = missingVariable
[groovyc] ^
[groovyc]
| Compiling 8 source files.
| Error Compilation error: startup failed:
/Users/jeff/t/grailscompilestatic/grails-app/services/demo/MyService.groovy: 9: [Static type checking] - The variable [missingVariable] is undeclared.
@ line 9, column 19.
String name = missingVariable
^

1 error

How will the compiler be able to work out what is a bad call and what is a bad call that can be ignored (i.e. a dynamic finder)?

我们有与类型检查器协作的类型检查扩展,因此当类型检查器认为它看到无效代码时,我们的扩展就会参与,并且如果扩展可以识别出它是动态调用,则扩展有机会将调用转换为动态调用类似于动态查找器,它不能静态分派(dispatch),但实际上在运行时有效。

关于grails - 如何使用@GrailsTypeChecked和@GrailsCompileStatic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29371578/

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