簡體   English   中英

這個Groovy表達式有什么問題?

[英]What's wrong with this Groovy expression?

通過GroovyShell (解釋器)運行以下Groovy表達式:

if(fizz.subtype == null) {
    if(fizz.color == 'RED') fizz.subtype = "DOG";
    else if(fizz.color == 'BLUE') fizz.subtype = "CAT";
    else if(fizz.color == 'GREEN') fizz.subtype = "SHEEP";
    else if(fizz.color == 'ORANGE') fizz.subtype = "LION";
    else if(fizz.color == 'YELLOW') fizz.subtype = "SNAIL";
    else if(fizz.color == 'GRAY') fizz.subtype = "SHARK";
    else if(fizz.color == 'PURPLE') fizz.subtype = "BAT";
    else if(fizz.color == 'BLACK') fizz.subtype = "FOX";
}; fizz;

給我以下堆棧跟蹤:

groovy.lang.MissingPropertyException: No such property: subtype for class: com.me.myapp.Fizz
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:479)
    at Script1.run(Script1.groovy:1)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:543)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:518)
    at com.tms.evaluator.GroovyEvaluator._evaluate(GroovyEvaluator.java:51)
    ...rest of stacktrace omitted for brevity

有任何想法嗎? 提前致謝!

if表達式的右括號后缺少分號:

fizz = [:]
if(fizz.subtype == null) {
    if(fizz.color == 'RED') fizz.subtype = "DOG";
    else if(fizz.color == 'BLUE') fizz.subtype = "CAT";
    else if(fizz.color == 'GREEN') fizz.subtype = "SHEEP";
    else if(fizz.color == 'ORANGE') fizz.subtype = "LION";
    else if(fizz.color == 'YELLOW') fizz.subtype = "SNAIL";
    else if(fizz.color == 'GRAY') fizz.subtype = "SHARK";
    else if(fizz.color == 'PURPLE') fizz.subtype = "BAT";
    else if(fizz.color == 'BLACK') fizz.subtype = "FOX";
}; fizz;

另外,我可以建議使用地圖進行此類數據匹配嗎?

fizz.color = 'ORANGE'

fizz.subtype = [
    'RED'    : 'DOG',
    'BLUE'   : "CAT",
    'GREEN'  : "SHEEP",
    'ORANGE' : "LION",
    'YELLOW' : "SNAIL",
    'GRAY'   : "SHARK",
    'PURPLE' : "BAT",
    'BLACK'  : "FOX"
][fizz.color]

assert fizz.subtype == 'LION'

大小寫匹配也可以工作,但是如果您有更復雜的任務,則最適合:

fizz.color = 'BLUE'

fizz.subtype = fizz.color.case {
    when 'RED'    then 'DOG'
    when 'BLUE'   then "CAT"
    when 'GREEN'  then "SHEEP"
    when 'ORANGE' then "LION"
    when 'YELLOW' then "SNAIL"
    when 'GRAY'   then "SHARK"
    when 'PURPLE' then "BAT"
    when 'BLACK'  then "FOX"
}

assert fizz.subtype == 'CAT'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM