NilClass
、TrueClass
とFalseClass
、すなわち、それぞれ定数であるnil
、true
とfalse
を、1つのインスタンスを持つ何NilClass、TrueClassの目的である、とFalseClassの?なぜ彼らはObject
クラスのインスタンスになれないのですか?関連するすべてのメソッドは、nil
、true
、false
のシングルトンメソッドとして単純に定義されていますか?関連する質問は、なぜこれらは定数として定義されていないのですか?これらのクラスを持つことの目的は何である、
答えて
「すべてがオブジェクトです」と「オブジェクトはインスタンスのクラスによって特殊化されています」という考え方が続きます。
nil
、true
、およびfalse
はすべてオブジェクトです(したがって、メソッドを含むクラスのインスタンス化です)。それらは1)それぞれのタイプの唯一の住人であり、2)不変オブジェクトは実装の最適化を可能にします - 実際にはのいずれかではありませんnil
で十分ですか?
値の特殊化がない便利なエラーメッセージ:x.class
「ただ動作します」。
> > nil.foo
> => #<NoMethodError: undefined method `foo' for nil:NilClass>
私はそれを言っ嬉しいNilClass
:-)
このクラスインスタンスのアプローチはまた、再オープンNilClass
を作る - それがために行われるかもしれない方法で簡単かつ一貫として - のために良いか悪いですか他のタイプ。
少なくともルビーのように再割り当てtrue
、false
又はnil
することは不可能である1.9.2(真/偽の再割り当て許可のPython 2.xのが、Pythonの3.xのでありません)。 true/false/nil
はではないため、の定数であるため、定数をルックアップなしで「リテラル値」としてASTまたはその実装が使用するものに最適化することができます。
> > VERSION
> => "1.9.2"
> > true = false
> => #<SyntaxError: Can't change the value of true>
> > [].each {|true|}
> => #<SyntaxError: Can't change the value of true>
ハッピーコーディング。
もちろんこれらはオブジェクトであり、あるクラスに属していなければなりません。私は彼らが 'Object'クラスのインスタンスにならない理由を尋ねています。私はあなたの答えの2番目の部分を一定にします。その点でそれは私をクリアする。 – sawa
Rubyは "ただのオブジェクトを取ると、それにいくつかのシングルトンメソッドを追加" の時間のいくつかのアプローチ取ります、民間::公共、:
C:\Documents and Settings\a.grimm>irb
irb(main):001:0> self.methods - Object.new.methods
は[
を与える含まを、:コンテキスト:CONF:irb_quit、:出口、 :終了:irb_print_working_workspace:irb_cwws:irb_pwws:cwws、 :pwws:irb_current_working_binding:irb_print_working_binding、 :irb_cwb:irb_pwb:irb_chws、: irb_cws、:chws、:cws、 :irb_change_binding、:irb_cb、:cb、:作業スペース、:irb_bindings、 :バインディング、irb_pushws、:pushws、:irb_push_binding、:irb_pushb、 :pushb、:irb_popws、:popws、:irb_pop_binding、:irb_popb、:popb 、 :ソース、:ジョブ、:FG、:、殺す:ヘルプ、:irb_exit、:irb_context、 :install_alias_method、:irb_current_working_workspace、 :irb_change_workspace、:irb_workspaces、:irb_push_workspace、 :irb_pop_workspace、:irb_load、:irb_require、 :irb_source、:IRB、 :irb_jobs、:irb_fg、:irb_kill、:irb_help]
彼らはtrue
、false
または0で、このアプローチをしない理由を私は知りません。人々はこれらのオブジェクトを(pstの答えごとに)理解する必要があるのに対して、人々は「メイン」(?)オブジェクトを理解する必要はないからかもしれません。
主なオブジェクトは私にとって特別なケースのようです。ほとんどのプログラムは一度も参照することはありません。 – diedthreetimes
- 1. リファクタリング目的でプロパティを持つクラスを持つことはできますか?
- 2. iOS RestKit [mappingProvider setMapping:forKeyPath:]メソッドの目的は何ですか?これらのメソッドの目的が何であるかを理解することはできません
- 3. scala.runtimeにあるこれらのJavaファイルの目的は何ですか?
- 4. これらのファイル記述子の目的は何ですか?
- 5. これらのタイムカウンタリファインメントステートメントの目的は何ですか?
- 6. これらの `typedef`の目的は何ですか?
- 7. これらのIISバインディングは何ですか?その目的は何ですか?
- 8. 私はこれらの3つのクラスが持つ
- 9. これら2つのクラスの違いは何ですか?
- 10. C#では、このクラス内でメソッドを囲む目的は何ですか?
- 11. このコードのクラス変数の目的
- 12. Djangoのコードエンティティを持つORMの目的は何ですか?
- 13. Expressionクラスの目的は何ですか?
- 14. Numberクラスの目的は何ですか?
- 15. オブジェクトの1つのクラスを選択することと、目的のcでidを使用することの中間にはありますか?
- 16. ref型のクラスメンバーを持つ目的は何ですか?
- 17. TaskCompletionSourceを持つTaskCreationOptionsの目的は何ですか?
- 18. 引数を持つPythonクラスのデコレータを持つことは可能ですか?
- 19. 私はこれらのレコードを持つデータベーステーブルを持つデータベース
- 20. Automapperコピーリストは、私は、これらのクラスを持っている
- 21. が、これは私のクラスである
- 22. 使用目的は何ですか?この状況では?
- 23. クラスのViewControllerはここで何intitalizers
- 24. 流暢NHibernateは:このクラスとのマッピングを持つ多くの
- 25. このメタプログラミングの例では、singleton_class.sendとsingleton_class.class_evalの目的は何ですか?
- 26. Silverlight SDKソースコードのこのメソッドの目的は何ですか?
- 27. この例のラムダの目的は何ですか?
- 28. このpostgres sqlクエリのクロスタブの目的は何ですか?
- 29. 内部に別のクラスのクラスオブジェクトの配列を持つクラスを持つことはできますか?
- 30. クラス図のこれらの表記法は何ですか?
良い質問ですが、これはPythonでも同様です。なぜなら、その背後には何らかの理由があるに違いありません。 –
ルビーの定数は実際には一定ではありません。http://www.rubyist.net/~slagell/ruby/constants.html – house9
あなたへの質問。これらの値のそれぞれに別のクラスを持たない* NOT *のメリットは何ですか?シングルトン法を使用することはめったに簡単ではなく、不要な複雑さのIMOを追加します。 – diedthreetimes