3

Ceylon でクラスの列挙されたすべてのインスタンスを反復処理する簡単な方法はありますか?

values()Java列挙型のように?

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"; }

ランダムなスーツを選びたい、またはすべてのスーツを名前で印刷したいとしましょう。

編集:

すべてのスーツを iterable に明示的に追加することは機能しますが、すべての可能な値を再度リストする必要があります。

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

誰かがもっと良いものを思いつくことができますか?

4

2 に答える 2

6

これは、次の方法で実行できますClassOrInterface.caseValues

Suit[] suits = `Suit`.caseValues;

返されたシーケンスについて:

このシーケンスは順序付けられており、すべてのケース タイプをスキップしてケース値のみを含めます。

于 2014-07-04T10:24:54.047 に答える
1

1 つの方法は、メタモデルを使用することです。

for (caseType in `class Suit`.caseTypes) {
    assert (is OpenClassOrInterfaceType caseType);
    print(caseType.declaration.name);
}
于 2013-10-17T09:14:50.367 に答える