У меня есть задача, в которой мне нужно реализовать процессор для пользовательского скрипта, где в одной части скрипта появляется unless
, и он должен вести себя как противоположность if statement
.Есть ли способ создать binding
, который будет вести себя так.Я новичок в Groovy
, поэтому, возможно, мое объяснение не так ясно, но мой код может рассказать немного больше о моей проблеме.Замена, если только if statement
не работает идеально, но мне нужна идея для создания unless
.
static List<String> filterSitesByUserScript(String userScript, List<String> sites) {
//properties
List<String> rememberedSites = new ArrayList<String>()
//binding
def binding = new Binding()
binding['allSites'] = sites
binding['rememberedSites'] = rememberedSites
binding['download'] = {String site ->
new URL(site).getText()
}
//binding['unless'] = {statement -> statement == !statement}
binding['siteTalksAboutGroovy'] = { content -> content.contains("groovy") || content.contains("Groovy") }
binding['remember'] = { String site -> rememberedSites.add(site)}
//groovy shell
GroovyShell shell = new GroovyShell(binding)
shell.evaluate(userScript)
return rememberedSites
}
//A test user script input.
String userInput = '''
for(site in allSites) {
def content = download site
unless (siteTalksAboutGroovy(content)) {
remember site
}
}
return rememberedSites
'''
//Calling the filtering method on a list of sites.
sites = ["http://groovy.cz", "http://gpars.org", "http://groovy-lang.org/", "http://infoq.com", "http://oracle.com", "http://ibm.com"]
def result = filterSitesByUserScript(userInput, sites)
result.each {
println 'No groovy mention at ' + it
}
assert result.size() > 0 && result.size() < sites.size
println 'ok'