2013-03-27 25 views
0

我是新來groovy。我試圖找出基本的語法。下面的代碼片段:groovy missingpropertyexecption

def CRITICAL = 2; 
def MAJOR = 3; 
def MINOR = 9; 
def GetPriorityFromString(String priorityStr) { 
    switch (priorityStr){ 
     case "Critical" : return CRITICAL; 
     case "Major" : return MAJOR; 
     case "Minor" : return MINOR; 
    } 
    return 0; 
} 
GetPriorityFromString("Minor") 

導致此錯誤:

groovy.lang.MissingPropertyException: No such property: MINOR for class: Script21 

What'm我幹什麼了?

(而且因爲我是新來的這門語言,隨時提出任何「更巧妙」的方式將一個字符串轉換爲一個枚舉值。)

+1

把它放在一個真正的類。 – 2013-03-27 18:27:07

回答

1

只需使用一張地圖

def mapping =["CRITICAL": 2, "MAJOR" : 3, "MINOR": 9] 
println mapping["MINOR"] 

由於對於您的原始代碼: 您對變量的範圍有問題。如果你在一個腳本上下文中,你可能不會使用「def」來聲明全局變量,只是把它放在外面而且它會工作。

CRITICAL = 2; 
MAJOR = 3; 
MINOR = 9; 
def GetPriorityFromString(String priorityStr) { 
    switch (priorityStr){ 
     case "Critical" : return CRITICAL; 
     case "Major" : return MAJOR; 
     case "Minor" : return MINOR; 
    } 
    return 0; 
} 
GetPriorityFromString("Minor") 

如果你把它變成一個普通的類,那麼你必須使用DEFS

class Test { 
def CRITICAL = 2; 
def MAJOR = 3; 
def MINOR = 9; 
def GetPriorityFromString(String priorityStr) { 
    switch (priorityStr){ 
     case "Critical" : return CRITICAL; 
     case "Major" : return MAJOR; 
     case "Minor" : return MINOR; 
    } 
    return 0; 
} 
} 
new Test().GetPriorityFromString("Minor")