【问题标题】:What is the use of "use" keyword/method in groovy?groovy中“use”关键字/方法的用途是什么?
【发布时间】:2020-05-05 15:02:46
【问题描述】:

我在 Groovy 中阅读了 use 关键字。但无法拿出来,因为它已经完全被使用了。而且我还附带了 category 类,在这个主题下,那也是什么?来自 Groovy In Action

class StringCalculationCategory {
  static def plus(String self, String operand) {
    try {
      return self.toInteger() + operand.toInteger()
    } catch (NumberFormatException fallback) {
      return (self << operand).toString()
    }
  }
}

use (StringCalculationCategory) {
  assert 1 == '1' + '0'
  assert 2 == '1' + '1'
  assert 'x1' == 'x' + '1'
}

有了上面的代码,谁能说说groovy中use关键字有什么用?还有上面的代码是做什么的?

【问题讨论】:

  • @simon:你可以找到一本很棒的书!
  • @niccolom。我已经将它与 Java 一起使用了大约 5 年,我会说它对于某些类型的代码是值得的。 Java 适合团队开发,Groovy 更适合快速编写脚本和灵活解决问题的方法。大多数情况下,它只是一种清洗,但偶尔使用 StringBuilder 或 File.text 之类的帮助程序使其非常值得用于脚本、原型和测试。

标签: groovy


【解决方案1】:

查看Pimp My Library Pattern 了解use 的作用。

在您的情况下,它重载了 String.add(something) 运算符。如果两个字符串都可以用作整数(toInteger() 不会抛出异常),则返回这两个数字的和,否则返回字符串的串联。

【讨论】:

    【解决方案2】:

    使用 如果您有一个没有源代码的类(例如在库中)并且您想向该类添加新方法,则该类很有用。

    顺便说一句,Dustin Marx 的博客中的this postInspired by Actual Events 指出:

    使用“关键字”实际上不是关键字,而是一种方法 Groovy 的 Object 类的 GDK 扩展,通过以下方式提供 Object.use(类别,闭包)。还有许多其他方法 在 Groovy GDK 对象上提供,可方便地访问 功能,可能看起来像语言关键字或函数 因为它们不需要对象的名称来继续它们。我倾向于不 在我的 Groovy 脚本中使用具有这些名称的变量(例如, println 和 sleep) 以避免潜在的可读性问题。

    还有其他类似的“关键字”实际上是Object类的方法,例如withGroovy JDK documentation 有一个此类方法的列表。

    【讨论】:

      【解决方案3】:

      一个很好的插图是groovy.time.TimeCategory。当与use() 一起使用时,它允许非常清晰易读的日期/时间声明。

      例子:

      use (TimeCategory) {
          final now = new Date()
          final threeMonthsAgo = now - 3.months
          final nextWeek = now + 1.week
      }
      

      【讨论】:

        猜你喜欢
        • 2017-05-07
        • 2014-09-24
        • 1970-01-01
        • 2014-05-26
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        • 2011-10-26
        • 2013-09-20
        相关资源
        最近更新 更多