私はRubyインタプリタがどのように実装されているかを研究していましたが、私にはまだ回答が得られなかった1つの質問が発生しました。それはClass
オブジェクト(r_cClass
)に1つのメソッドを送信すると、実際にはsuper
がメタクラスのr_cClass
であるため、(r_cClass
)はそれ自身に設定されていますClass
'クラス。しかし、Class
'クラスはClass
ですので、Class
のインスタンスメソッドを見てみるといいでしょうか?しかし、ドキュメントではClass
クラスメソッドとClass
インスタンスメソッドが分離されているので、そうではありません。 Rubyのsearch_method
eval.c
には、Class
クラスの特別なチェックはありませんでした。誰かがこれについていくつかの光を当てることができますか?ClassはどのようにClassクラスになり、Classインスタンスメソッドを持たないのですか?
答えて
あなたの考え方はうまくいくはずですが、私はそのようにはうまくいかないとは思っていません。ルビー1.8.7において
:
irb> a = Class.new.methods - Object.new.methods
=> [... 36 element array ...]
irb> b = Class.methods - Object.new.methods
=> [... 37 element array ...]
irb> b - a
=> ["nesting"]
正常クラスインスタンス(Class.new)は36のインスタンスメソッドを有します。 Classクラスのインスタンス(通常のクラスインスタンスでもある)を見ると、36個のインスタンスメソッドと1つの追加のクラスメソッド(ネスト)があります。これはスーパークラスモジュールから継承されているためです。
クラスにインスタンスメソッドを追加すると、クラスメソッドとして自動的に追加されますが、クラスのメタクラスにクラスを追加することはできません。
irb> class Class ; def everywhere ; true ; end ; end
irb> class << Class ; def only_singleton ; true ; end ; end
irb> Class.everywhere
=> true
irb> Class.new.everywhere
=> true
irb> Class.only_singleton
=> true
irb> Class.new.only_singleton
NoMethodError: undefined method 'only_in_singleton' for #<Class:0x4800ac8>
したがって、実際にはメソッドは同じです。実際には、この考えに私を導いたソースコードには手がかりがありません。 Rubyのドキュメントでは、クラスインスタンスメソッドとクラスシングルトンメソッドを明確に区別しているだけです。その分離は分かりやすくするためだけですか? – eugeniodepalo
シングルトンメソッドとは、クラスメソッドを意味しますか? – rdvdijk
はい、クラスメソッドを意味します。 – eugeniodepalo
- 1. isJavaType(Classクラス)またはisUserType(Classクラス)?
- 2. `String`クラスのような` Class`の実装
- 3. なぜ「[self class] == [super class]」ですか?
- 4. OS Xの[@ "" class]!= NSClassFromString(NSStringFromClass([@ "" class]))はなぜですか? iOSの
- 5. クラスng-classのクラス
- 6. "class [i]"クラスのようなクラスのアクセスベクトルはベクトル
- 7. CSS:#id .class VS .classのパフォーマンス。どちらが良いですか?
- 8. NetBeansで.classを.classに変更するにはどうすればよいですか?
- 9. <button class = "target">でclass = "target"とは何か?></button>のように?
- 10. iOSの[Class new]と[[Class alloc] init]の違いは何ですか?
- 11. Moose :: Meta :: ClassまたはClass :: MOP :: Classを使用した正しい動的クラス生成
- 12. Duplicate class MultiDex $ V14.class
- 13. std :: unordered_map <Class、Class>をClassのメンバーとして持つことは可能ですか?
- 14. 私はこのように定義されたクラス持たリスト<class>
- 15. PHP Facebook Class:どのようにトップブロックの致命的なエラー?
- 16. Objective-C:ルートクラスにない 'Class'でインスタンスメソッド 'method'が使用されています
- 17. エラー:タイプ 'class'が 'class'の直接ベースではありません
- 18. [class * = "custom-style-"]と ".this-class-is-default-style"の間にはどんなに高価ですか?
- 19. java singleton class vs final class
- 20. "Duplicate class found" - IntelliJと.classファイル
- 21. load_obj.AddComponentの<class>は何ですか?<Class>();?
- 22. DBIx :: Classのディスカッションに最適な本はどれですか?
- 23. ng-classディレクティブで条件と関数を持つng-class
- 24. 奇妙なエラー: `class :: class() 'への未定義の参照
- 25. Class :: Structをどのようにクローンしますか?
- 26. Typescript typeof classと派生クラス
- 27. ng-classとclass CSS/style属性
- 28. Observable <Class[]> vs Observable <Class> []
- 29. ng-classを整理するにはどうすればよいですか?
- 30. Attributes.Add( "class"、 "className")しかし、既存のクラスを保持する
このように抽象的な質問では、インスタンスメソッドの例やクラスメソッドの例など、具体的な例を挙げることをお勧めします。 –