0

私はグルービーが初めてです。私は基本的な構文を理解しようとしています。次のコード スニペット:

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

私は何を間違っていますか?

(そして、私はこの言語を初めて使用するので、文字列を列挙値に変換する「より洗練された」方法を自由に提案してください。)

4

1 に答える 1

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")

通常のクラスに入れる場合は、定義を使用する必要があります

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")
于 2013-03-27T18:23:59.927 に答える