Подтвердить что ты не робот

Каково использование слова "use" /​​method в groovy?

Я прочитал ключевое слово use в Groovy. Но не мог выйти, потому что он был точно использован. И я также прихожу с классами категории, по этой теме, что это? И от, Groovy В действии

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'
}

С приведенным выше кодом, может ли кто-нибудь сказать, что используется use ключевое слово в groovy? А также что делает этот код?

4b9b3361

Ответ 1

Смотрите Pimp My Library Pattern, что делает use.

В вашем случае он перегружает оператор String.add(something). Если обе строки могут использоваться как целые числа (toInteger() не генерирует исключение), он возвращает сумму этих двух чисел, в противном случае возвращается конкатенация строк.

Ответ 2

Использование

полезно, если у вас есть класс, для которого у вас нет исходного кода (например, в библиотеке), и вы хотите добавить новые методы в этот класс.

Кстати, этот пост в блоге Dustin Marx Вдохновленный действительными событиями:

Использование ключевого слова на самом деле НЕ является ключевым словом, но является Groovy Расширение GDK класса Object и предоставляется через Object.use(категория, закрытие). Существует множество других методов предоставленные на объекте Groovy GDK, которые обеспечивают удобный доступ к функциональности и могут отображаться как языковые ключевые слова или функции потому что им не требуется имя объекта, чтобы продолжить их. Я не склонен использовать переменные в моих сценариях Groovy с этими именами (например, println и sleep), чтобы избежать потенциальных проблем с читабельностью.

Существуют и другие подобные "ключевые слова", которые на самом деле являются методами класса Object, такими как. Groovy документация JDK содержит список таких методов.