2017-08-29 9 views
1

これはおそらく本当に馬鹿です。チャペルのオブジェクトのサブクラスをどうやってチェックしますか?チャペルでサブクラスをチェックする方法

class Banana : Fruit { 
    var color: string; 
} 
class Apple: Fruit { 
    var poison: bool; 
} 
class Fruit { 
} 

var a = new Apple(poison=true); 
var b = new Banana(color="green"); 

// ?, kinda Java-ish, what should I do? 
if (type(a) == Apple.class()) { 
    writeln("Go away doctor!"); 
} 

私はサブクラスについて尋ねていますが、私はそれがどちらかFruitclassだ場合、私はチェックする方法がわからない実現。正確な型の一致のために

答えて

3

、あなたはこの書きたいでしょう:aのタイプはFruitのサブタイプであるかどうかを確認するには

if (a.type == Apple) { 
    writeln("Go away doctor!"); 
} 

を、これは動作します:

if (isSubtype(a.type, Fruit)) { 
    writeln("Apples are fruit!"); 
} 

参考のために同様にタイプ情報をチェックするために使用できる関数のリストがあります。here

※あなたの代わりにこれを書くことができるようifブロックは、必要ありません。

if isSubtype(a.type, Fruit) { 
    writeln("Apples are fruit!"); 
} 
+1

これは、Javaよりもエレガントです... –

+1

さらにエレガント! –

3

以前の答えは型がコンパイル時に知られている場合を説明するの細かい仕事をしていませんが、何であれば、それが唯一の実行時に知られています-時間?この場合

​​

nilにおけるその潜在的なサブタイプApple結果にaの動的キャストそれがあった場合には、コンパイル時の型Appleと実際にAppleまたは発現なかった場合。

+0

これはかなりクールです.... –

関連する問題