Groovy 如何修改我的闭包以添加错误消息

Groovy 如何修改我的闭包以添加错误消息,groovy,Groovy,我有一些代码可以根据我的输入验证一些布尔规则 def validate(x, rules) { rules.each { if(!it(x)) throw new Exception("${x} is not valid! Validation failed!") } } def rule1 = { y -> y > 10 } def rule2 = { y -> y != 72 } def rule3 = { y -&

我有一些代码可以根据我的输入验证一些布尔规则

def validate(x, rules) {
    rules.each {
        if(!it(x))
            throw new Exception("${x} is not valid! Validation failed!")
    }
}

def rule1 = { y -> y > 10 }
def rule2 = { y -> y != 72 }
def rule3 = { y -> y < 100 }

def rules = [rule1, rule2, rule3]

def a = 12
validate(a, rules)

因为我的规则是闭包,我不确定我怎么能做到?有人能帮我怎么做吗?

应该像使用Groovy truth一样简单:

def validate(x, rules) {
    rules.each {
        error = it x
        if(error)
            throw new Exception(error)
    }
}

def rule1 = { it > 10 ? false : "rule 1: '$it' is not valid" }
def rule2 = { it != 72 ? false : "rule 2: '$it' is not valid" }
def rule3 = { it < 100 ? false : "rule 3: '$it' is not valid" }

def rules = [rule1, rule2, rule3]

def a = 12
validate a, rules
def验证(x,规则){
规则,每个{
错误=it x
如果(错误)
抛出新异常(错误)
}
}
def rule1={it>10?false:“规则1:'$it'无效”}
def rule2={it!=72?false:“规则2:'$it'无效”}
def rule3={it<100?false:“规则3:'$it'无效”}
def规则=[规则1、规则2、规则3]
def a=12
验证一个规则
这里还有另一个变体:

def validate(x, rules) {
    rules.each { r, e ->
        if(!r(x))
            throw new Exception(e(x))
    }
}

def rule1 = [{ it > 10 }, { "rule 1: '$it' is not valid" }]
def rule2 = [{ it != 72 }, { "rule 2: '$it' is not valid" }]
def rule3 = [{ it < 100 }, { "rule 3: '$it' is not valid" }]

def rules = [rule1, rule2, rule3]

def a = 12
validate a, rules
def验证(x,规则){
规则.each{r,e->
if(!r(x))
抛出新异常(e(x))
}
}
def rule1=[{it>10},{“规则1:'$it'无效”}]
def规则2=[{it!=72},{“规则2:'$it'无效”}]
def规则3=[{it<100},{“规则3:'$it'无效”}]
def规则=[规则1、规则2、规则3]
def a=12
验证一个规则
您可以这样尝试(每个规则都是一个映射,其中包含验证结束和错误消息):

def验证(x,规则){
规则,每个{
如果(!it.r(x))
抛出新异常(it.e)
}
}
def rule1=[r:{it=100},e:“规则3无效”]
def规则=[规则1、规则2、规则3]
def a=12
验证一个规则

将规则用作地图中的键怎么样

def validate(x, rules) {
    rules.each { rule, condition ->
        if(!condition(x))
            throw new Exception("${rule} is not valid! Validation failed!")
    }
}

def rules = [
    rule1 : { y -> y > 10 },
    rule2 : { y -> y != 72 },
    rule3 : { y -> y < 100 }
]

def a = 12
validate(a, rules)

validate 101, rules // java.lang.Exception: rule3 is not valid! Validation failed!
def验证(x,规则){
rules.each{规则,条件->
如果(!条件(x))
抛出新异常(“${rule}无效!验证失败!”)
}
}
def规则=[
规则1:{y->y>10},
规则2:{y->y!=72},
规则3:{y->y<100}
]
def a=12
验证(a,规则)
验证101,规则//java.lang.Exception:规则3无效!验证失败!

只要您不想在错误消息中提及实际值,此功能就可以工作。
def validate(x, rules) {
    rules.each {
        if(!it.r(x))
            throw new Exception(it.e)
    }
}

def rule1 = [r: { it <= 10} , e:"rule 1 is not valid" ] 
def rule2 = [r: { it == 72} , e:"rule 2 is not valid" ]
def rule3 = [r: { it >= 100}, e:"rule 3 is not valid" ]

def rules = [rule1, rule2, rule3]

def a = 12
validate a, rules
def validate(x, rules) {
    rules.each { rule, condition ->
        if(!condition(x))
            throw new Exception("${rule} is not valid! Validation failed!")
    }
}

def rules = [
    rule1 : { y -> y > 10 },
    rule2 : { y -> y != 72 },
    rule3 : { y -> y < 100 }
]

def a = 12
validate(a, rules)

validate 101, rules // java.lang.Exception: rule3 is not valid! Validation failed!