Я не уверен, что понимаю, что вы пытаетесь сделать.Если вы пытаетесь use
нескольких категорий одновременно в одном блоке кода, но не хотите перечислять все эти категории каждый раз, когда хотите их использовать (пожалуйста, исправьте меня, если вы не это имели в виду), выможет поместить это длинное use
в метод, который принимает блок кода (Закрытие) в качестве параметра, а затем использовать этот метод вместо длинного use
.Что-то вроде:
@Category(String)
class ShoutCategory {
def shout() {
this.toUpperCase() + '!'
}
}
@Category(Integer)
class ToEnglishCategory {
def toEnglish() {
// Only works for integers in 0..5 for now...
['zero', 'one', 'two', 'three', 'four', 'five'][this]
}
}
def useAwesomeExtensions(Closure cl) {
use (ShoutCategory, ToEnglishCategory) {
cl()
}
}
useAwesomeExtensions {
// Here we can do all sorts of magic things.
println 3.toEnglish().shout() // Outputs "THREE!"
}
// "hello".shout() -> Would throw a MissingMethodException here
В этом глупом примере классы String и Integer будут классами, которые вы хотите расширить, но у вас нет к ним доступа, а useAwesomeExtensions
действует как большая категорияэто включает в себя кучу других категорий.Надеюсь, это поможет:)