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. これらの `typedef`の目的は何ですか?
- 6. これらのファイル記述子の目的は何ですか?
- 7. これらのIISバインディングは何ですか?その目的は何ですか?
- 8. これら2つのクラスの違いは何ですか?
- 9. 私はこれらの3つのクラスが持つ
- 10. C#では、このクラス内でメソッドを囲む目的は何ですか?
- 11. クラスはパブリックメソッドのみを持つことを目指すべきですか?
- 12. は、私はこれらの2つのクラスを持っている外部クラス
- 13. @OneToManyは、私は2つのテーブルと、これらのクラスを持っている
- 14. この例の2番目の[]の目的は何ですか?
- 15. ここで仮想演算子()()の目的は何ですか?
- 16. このコードの4行目の目的は何ですか
- 17. これはテスト目的のためのものであるグルービー
- 18. これらのIf文の条件付きロジックの目的は何ですか?
- 19. Expressionクラスの目的は何ですか?
- 20. Numberクラスの目的は何ですか?
- 21. このコードのクラス変数の目的
- 22. Djangoのコードエンティティを持つORMの目的は何ですか?
- 23. この静的変数の目的は何ですか?
- 24. 私は、これらのクラス持つ式ツリー
- 25. オブジェクトの1つのクラスを選択することと、目的のcでidを使用することの中間にはありますか?
- 26. TaskCompletionSourceを持つTaskCreationOptionsの目的は何ですか?
- 27. ref型のクラスメンバーを持つ目的は何ですか?
- 28. 私はこれらの2つのパブリックメソッドを持つクラスを持っているSTLのmapで
- 29. XAMLは、私はこの項目テンプレートとリストビューを持つListViewの
- 30. 私はこれが私のクラスであるrecyclerview.Adapterクラスを持っているRecyclerView.Adapter
良い質問ですが、これはPythonでも同様です。なぜなら、その背後には何らかの理由があるに違いありません。 –
ルビーの定数は実際には一定ではありません。http://www.rubyist.net/~slagell/ruby/constants.html – house9
あなたへの質問。これらの値のそれぞれに別のクラスを持たない* NOT *のメリットは何ですか?シングルトン法を使用することはめったに簡単ではなく、不要な複雑さのIMOを追加します。 – diedthreetimes