gpt4 book ai didi

groovy - Groovy 中的 __LINE__ 功能

转载 作者:行者123 更新时间:2023-12-04 15:25:47 26 4
gpt4 key购买 nike

可以通过 __LINE__ 获取当前行号在 Ruby 或 Perl 中。
例如:

print "filename: #{__FILE__}, line: #{__LINE__}"

Groovy 中是否有相同的功能?

最佳答案

不是直接的,但您可以通过 Exception(或 Throwable)堆栈跟踪获得它。例如:

 StackTraceElement getStackFrame(String debugMethodName) {
def ignorePackages = [
'sun.',
'java.lang',
'org.codehaus',
'groovy.lang'
]
StackTraceElement frame = null
Throwable t = new Throwable()
t.stackTrace.eachWithIndex { StackTraceElement stElement, int index ->
if (stElement.methodName.contains(debugMethodName)) {
int callerIndex = index + 1
while (t.stackTrace[callerIndex].isNativeMethod() ||
ignorePackages.any { String packageName ->
t.stackTrace[callerIndex].className.startsWith(packageName)
}) {
callerIndex++
}
frame = t.stackTrace[callerIndex]
return
}
}
frame
}

int getLineNumber() {
getStackFrame('getLineNumber')?.lineNumber ?: -1
}

String getFileName() {
getStackFrame('getFileName')?.fileName
}

String getMethodName() {
getStackFrame('getMethodName')?.methodName
}

def foo() {
println "looking at $fileName:$lineNumber ($methodName)"
}

foo()

// ==> looking at test.groovy:39 (foo)

不过要注意一点:像这样获取行号、文件名或方法非常慢。

关于groovy - Groovy 中的 __LINE__ 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407039/

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