「Crystal」の版間の差分
削除された内容 追加された内容
→メソッド: →クラスのメソッド一覧: 節のレベル変更 タグ: 2017年版ソースエディター |
→superclass と subclasses: Crystal には、RubyのClassにあるメソッド superclass と subclasses がないので、マクロで実装しました。 タグ: 2017年版ソースエディター |
||
476 行
</syntaxhighlight>
: crystal の tool hierarchy サブコマンドで、クラスの継承関係がわかります。
===== superclass と subclasses =====
Crystal には、RubyのClassにあるメソッド superclass と subclasses がないので、マクロで実装しました。
;superclass と subclasses:<syntaxhighlight lang=crystal line>
class Class
def self.superclass
{{ @type.superclass }}
end
def self.subclasses : Array(self.class)
{{ @type.subclasses }}.map(&.as(self.class))
end
def self.all_subclasses : Array(self.class)
{% begin %}
[{{ @type.all_subclasses.join(",").id }}] of self.class
{% end %}
end
end
class A end
class AA < A end
class AAA < AA end
class AAB < AA end
class AB < A end
p! A,
A.subclasses,
A.all_subclasses,
AAA.superclass,
A.superclass
c = AAA
while !c.is_a? Nil
p! c.superclass
c = c.superclass
end</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
A # => A
A.subclasses # => [AA, AB]
A.all_subclasses # => [AA, AAA, AAB, AB]
AAA.superclass # => AA
A.superclass # => Reference
c.superclass # => AA
c.superclass # => A
c.superclass # => Reference
c.superclass # => Object
c.superclass # => nil
</syntaxhighlight>
==== 抽象クラス ====
|