2017-08-13 99 views
1

我有一個枚舉抽象類的類型:檢查枚舉類

shared abstract class Foo() of bar|baz {} 

並試圖檢查是否Foo的功能是不是bar

shared void test(Foo foo) { 
    if (!is bar foo) { 

    } 
} 

我得到的錯誤

incorrect syntax: no viable alternative at token 'bar' 

回答

3

@ gdejohn的答案是正確的,但我還要指出,它不通常太大的意義,直接引用枚舉實例的類型。通常你會這樣寫代碼:

void test(Foo foo) { 
    if (foo!=bar) { 
     print("Not bar!"); 
    } 
} 
+1

同意你通常不在意縮小類型。有意義的情況是,如果'bar'或'baz'聲明瞭你想要使用的新屬性或方法。 – gdejohn

+1

還有另一個更有趣的用例:您想將選項集縮小到實例的子集,例如,類型如下:'\ Ioption1 | \ Ioption4 | \ Ioption5'。 –

1

因爲bar是一個枚舉實例,它只是一種價值,而不是一種類型。但它確實有一個比Foo更具體的類型,您可以用\I加前綴來表示它。

void test(Foo foo) { 
    if (!is \Ibar foo) { 
     print("Not bar!"); 
    } 
}