Мне удалось привязать объект к ConfigSlurper Groovy, но не к методу. Разве это невозможно?Как передать метод в качестве переменной привязки в ConfigSlurper Groovy?
Вот пример
String conf = """
k1 = "v1"
environments{
prod{
person.create("prod.id1"){
name = "prod.name1"
}
}
dev {
person.create("dev.id1"){
name = "dev.name1"
}
}
}
environments{
prod{
create("prod.id2"){
name = "prod.name2"
}
}
dev {
create("dev.id2"){
name = "dev.name2"
}
}
}
"""
def parser = new ConfigSlurper("prod")
Person person1 = new Person()
Person person2 = new Person()
parser.setBinding([person: person1, // <-- SUCCESS
create: person2.&create]) // <-- NOT SUCCESS?
println parser.parse(conf)
println "person1=${person1.dump()}"
println "person2=${person2.dump()}"
class Person{
String id
String name
public void create(String id, Closure c){
this.id = id
this.with(c)
}
}
Выход
[k1:v1, create:prod.id2, create.name:prod.name2]
person1=<[email protected] id=prod.id1 name=prod.name1>
person2=<[email protected] id=null name=null>
Игнорируйте любые конструктивные недостатки в примере.
Попробуйте использовать 'create.call() {}' – Dany
Не могли бы вы поделиться тем, чего хотите достичь? Вероятно, 'ConfigSlurper' не является правильным способом сделать это в первую очередь – Dany
@Dany Спасибо,' .call() 'работает. Я планирую разработать DSL, и одним из требований является поддержка специфики среды. В то время как 'create.call (..)' работает, есть ли способ устранить необходимость использования 'call'? – phani