2013-10-16 295 views
3

有沒有一種簡單的方法來遍歷Ceylon中所有類的枚舉實例?迭代枚舉類實例

就像用於Java枚舉的values()一樣?

abstract class Suit() of hearts | diamonds | clubs | spades { 
    shared formal String name; 
} 
object spades extends Suit() { name => "Spades"; } 
object clubs extends Suit() { name => "Clubs"; } 
object diamonds extends Suit() { name => "Diamonds"; } 
object hearts extends Suit() { name => "Hearts"; } 

可以說我想選一件隨機套裝或者我想用他們的名字打印所有套裝。

編輯:

明確將所有適合於一個可迭代的作品,但我們不得不再次列出所有可能的值。

{Suit+} suits = {spades, clubs, diamonds, hearts}; 

有人能想出更好的東西嗎?

回答

6

這可現在ClassOrInterface.caseValues來完成:

Suit[] suits = `Suit`.caseValues; 

關於returned sequence

這個順序排列,並跳過任何案例類型只包含案例值。

+0

只是爲了記錄,直到最近才提供。感謝錫蘭團隊的加入! –

1

的一種方法是使用元模型:

for (caseType in `class Suit`.caseTypes) { 
    assert (is OpenClassOrInterfaceType caseType); 
    print(caseType.declaration.name); 
} 
+2

注:我打開[此問題](https://github.com/ceylon/ceylon.language/issues/329)。 –

+0

我已經自己走了這麼遠。但正如你在問題中提到的那樣,獲得這些實例會很好。感謝您的調查。 –