0

モジュールの祖先が表示される場合、たとえばString

String, Comparable, Object, Kernel, BasicObject

それらのいくつか(String、Object、BasicObject)はクラスであり、他はそうではありません。それらを区別するための表記法はありますか?頭に浮かんだ可能性のある候補は、モジュールを含める<<代わりに使用することでした。<

String << Comparable < Object << Kernel < BasicObject

または逆に、クラス継承の場合:

String < Comparable << Object < Kernel << BasicObject

でもわかりません。まだ表記がない場合、上記についてどう思いますか?これはUMLでどのように表現されますか?

4

1 に答える 1

2

私が知っているような表記はありません。

ただし、ほとんどの場合、必要ではないと思います。一般に(ここには注意点がある可能性がありますが、現時点では考えられません)、モジュールが祖先チェーンの一部になると、祖先チェーンのクラスのように動作します。Stringの例を使用するには、を''.is_a? Comparable返し、 Comparableが定義するString内のメソッドtrueを呼び出すと、Comparableの実装が呼び出されます。super

唯一の違いはinitialize、モジュールのインスタンスを作成できないためです。

UMLに関しては、これを考えると、UMLがモジュールを表現する方法がまったく異なるとは思わないので、クラスと同じように通常の祖先になることができます(私は思います)。

個人的には、提案された表記法を解析するのは少し難しいと思います。私が気にかけるときは、すべてが綴られているのを見るだけです。

a = String.ancestors
a.map{ |c| c.class.to_s.downcase }.zip(a).map { |o| o.join(' ') }.join(' < ')
#=> "class String < module Comparable < class Object < module PP::ObjectMixin < module Kernel < class BasicObject"
于 2012-10-15T01:43:09.697 に答える