Каково использование слова "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? А также что делает этот код?
Ответы
Ответ 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 содержит список таких методов.