2017-05-10 35 views
1

我有一些代碼驗證了一些布爾規則對我的輸入。如何修改我的封閉以添加錯誤消息

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) 

我的每個規則是含有一個布爾表達式閉包。

我想調整我的規則以包含錯誤消息以及。然後內部驗證我想它會拋出錯誤消息,當布爾值評估爲false。

事情是這樣的:

if(!it(x)) 
    throw new Exception("${x} it(errorMsg)") 

由於我的規則是關閉我不知道我該怎麼辦呢?有人可以幫我解決這個問題嗎?

回答

1

你可以試試這個方式(每個規則是具有驗證關閉地圖和錯誤消息):

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 
+0

只要您不想提及錯誤消息中的實際值,它就會生效。 – Vampire

1

應儘可能使用Groovy道理非常簡單:

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 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 
0

如何使用規則a在地圖上的鑰匙?

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!