Groovy 中的 __LINE__ 功能

2024-04-27

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

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

Groovy 中有同样的功能吗?


不能直接获取,但您可以通过异常(或可抛出)堆栈跟踪来获取它。例如:

 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)

不过需要注意的是:获取行号、文件名或这样的方法是very slow.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Groovy 中的 __LINE__ 功能 的相关文章

随机推荐

  • Javascript 递增运算求值顺序

    我知道后缀 前缀递增 递减运算符的作用 而在 javascript 中 这似乎没有什么不同 虽然我可以很容易地猜出这一行的结果 var foo 10 console log foo foo foo foo foo output 10 11
  • 导航栏按钮点击区域无法正常工作(图像不可点击)

    Xcode 11 4 iOS 13 4 导航栏 UIBarButton 项目未按预期工作 我使用故事板作为按钮 没有编写代码 我更新 Xcode 后它工作得很好 现在它不起作用了 只能触摸绿色区域 图片can not 我还检查了屏幕调试器
  • jQuery - 如何动态添加验证规则

    我正在尝试向某些动态控件动态添加验证规则 input id Hours rules add required 但是这一行给了我以下错误 data element form validator 为 null 使用验证函数以静态方式定义规则效果
  • Polly 策略记录异常并重新抛出

    我考虑使用Polly https github com App vNext Polly handing return values and policytresult创建策略来记录异常并重新抛出 我没有找到允许它开箱即用的现有方法 但我看到
  • 在 Apache POI 4.0 中为 XSSFWorkbook 创建自定义颜色样式

    要在 Apache POI 3 7 及更低版本中为 XSSFWorkbook 应用自定义颜色 可以执行以下操作 java awt Color c new java awt Color 1 2 3 XSSFCellStyle xcs xssf
  • 将 C# 字符串数组序列化为 JSON 数组

    我的 Layout cshtml 文件中有以下代码 我的想法是 在我的javascript代码中填写了一些有关安全性的项目 LoggedIn和用户名显然没有问题 但是角色在javascript中的放置方式是错误的 Roles 只是一个 st
  • Apache httpd:根据其他*响应*标头有条件地设置响应标头

    有没有办法有条件地设置新的响应标头 其中条件使用另一个response标题 具体来说 仅当响应具有特定的 Content Type 时才应设置新的响应标头 我调查过模组头 http httpd apache org docs 2 2 mod
  • R purrr:::pmap:如何按名称引用输入参数?

    我正在使用Rpurrr pmap具有三个输入 目前尚不清楚我如何在formula称呼 使用map2时 formula通话进行如下 x y 但是使用的时候怎么办pmap 重现哈德利的例子http r4ds had co nz lists ht
  • 从 split 切换到 preg_split 时 php preg_split 错误

    在从 split 更改为 preg split 以获得 php 5 3 兼容性后 我从 php 收到此警告 PHP Warning preg split Delimiter must not be alphanumeric or backs
  • XML 字符串到 XML 文档

    我有一个完整的 XML 文档String我需要将其转换为 XML 文档并解析文档中的标签 此代码示例取自csharp examples net http www csharp examples net xml nodes by name 写
  • Google App Engine 上的 NestJS 项目显示错误“无法写入文件”&&“EROFS:只读文件系统”

    当我在 Google App 引擎上部署 NestJS 项目时 我正在努力解决如下错误 错误 TS5033 无法写入文件 workspace dist properties dto property filter dto d ts EROF
  • Android:实时图像处理

    我有一个应用程序 它进行相机预览 对每一帧执行一些基本的图像处理功能 例如边缘检测 颜色变化 图像扭曲等 并 实时 将修改后的帧显示到屏幕上 类似于Android Market中的 Paper Camera 应用程序 我的方法总结 我也做过
  • 长异常链的优雅替代方案? [复制]

    这个问题在这里已经有答案了 很多时候我发现自己写的东西看起来像这样 try procedure a except WrongProcedureError try procedure b except WrongProcedureError
  • 具有多个 Item 布局的 ListView 适配器

    我正在考虑向我的 Android 应用程序添加一个带有缩略图的列表视图 左边是缩略图 右边是文字 有没有办法用单独的 xml 文件填充列表视图 例如 我可以为奥地利 英国 美国等提供单独的 xml 并将它们添加到列表视图中吗 我问的原因是
  • 如何将“实例键”添加到 keras 模型输入以在 gcloud ai-platform 中进行批量预测?

    我正在尝试添加 键 以匹配 Google AI Platform 的批量预测输出 但是我的模型输入只允许一个输入 看起来像这样 input tf keras layers Input shape max len x tf keras lay
  • 可以在 __getitem__ 上使用多个参数吗?

    我正在尝试使用 getitem self x y 在我的 Matrix 类上 但在我看来它不起作用 我仍然不太了解如何使用 python 我这样称呼它 print matrix 0 0 是否有可能使用多个参数 谢谢 也许我可以只使用一个参数
  • 敌人不会在 pygame 中自行移动[重复]

    这个问题在这里已经有答案了 好吧 所以我的敌人只有在我移动角色时才会移动 但有时它也会完全从游戏窗口中产生 还有背景 玩家和敌人 在我按下移动按钮之前不会弹出 我对此感到非常抱歉 lmfao 也对我被告知将它们放在那里以提醒 wtf 的文本
  • 要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet

    我在 Kendo UI 网格中绑定了批量记录 响应是从 Json 返回的 我在使用以下格式时遇到错误 问题代码 方法1 public JsonResult KendoserverSideDemo int pageSize int skip
  • 从 C# 运行 32 位或 64 位 PowerShell

    我构建了一个执行 PowerShell 脚本的 32 位 NET DLL 我需要它能够以 64 位模式运行脚本and 32 bit 我已经知道如何使用命令行执行此操作 C Windows Sysnative cmd c powershell
  • Groovy 中的 __LINE__ 功能

    可以通过以下方式获取当前行号 LINE 在 Ruby 或 Perl 中 例如 print filename FILE line LINE Groovy 中有同样的功能吗 不能直接获取 但您可以通过异常 或可抛出 堆栈跟踪来获取它 例如 St