もちろん、オブジェクトとハッシュを同じように使うことができます。このように、キーと値のペアのOBオブジェクトを格納:
[3] pry(main)> class Person
def initialize(name, gender)
@name = name
@gender = gender
end
end
[3] pry(main)* => :initialize
[4] pry(main)> x = Person.new("Dan", "M")
=> #<Person:0x00000003708098 @gender="M", @name="Dan">
[13] pry(main)> y = Person.new("Peter", "M")
=> #<Person:0x0000000391fca0 @gender="M", @name="Peter">
[22] pry(main)> z = {name: "Maria", gender: "F"}
=> {:name=>"Maria", :gender=>"F"}
しかし、これは本当にオブジェクトはclass/objectとhashの定義からオブジェクトオリエンテプログラミング言語のすべての力を得ることはありません。
Rubyがあります完璧なオブジェクト指向プログラミング言語です。オブジェクト指向プログラミング言語の機能 は、次のとおりです。
Data Encapsulation:
Data Abstraction:
Polymorphism:
Inheritance:
これらの機能は、オブジェクト指向Rubyで議論されてきました。
オブジェクト指向プログラムには、クラスとオブジェクトが含まれます。クラスは個々のオブジェクトが作成される青写真の です。 オブジェクト指向の用語では、あなたの自転車は自転車として知られているオブジェクトのクラス のインスタンスであると言います。
車の例を挙げてください。それは、車輪、馬力、および 燃料またはガスタンク容量を含む。これらの特性は、クラスVehicleのデータメンバ を形成する。これらの特性の助けを借りて、1台の車を他の車と区別することができます( )。
車両には、停止、運転、 などの特定の機能があり、速度も向上します。これらの関数でも、クラス ビークルのデータメンバーが形成されます。したがって、クラスを の特性と関数の組み合わせとして定義することができます。
とハッシュ: "従業員" => "給与":
ハッシュは、このようなキーと値のペアのコレクションです。これは配列に似ていますが、インデックスは整数型インデックスではなく、 任意のオブジェクト型の任意のキーで行われます。
私はあなたにハッシュをお勧めします。
一方
は、コメントのオブジェクト表現でappers数を示したように、オブジェクトIDであるが、いくつかの操作を添加した:
1)ビット単位の左シフト:
5 << 1 # gives 10
2)あなたは、このようなオブジェクトのハッシュ表現を取得することができますルビーでようやく
(10).to_s(16)
"a"
pry(main)> x = Person.new("Dan", "M")
=> #<Person:0x00000003708098 @gender="M", @name="Dan">
[5] pry(main)> x.object_id
=> 28852300
[8] pry(main)> (x.object_id << 1).to_s(16)
=> "3708098"
をhexadeimalに渡さ:
x.instance_variables.each {|var| hash[var.to_s.delete("@")] = x.instance_variable_get(var) }
'0x00 ...'は '(object_id << 1).to_s(16)'( 'object_id'、16進数で1つ左にシフトしています。)オブジェクトが何であるかについては、たくさんの本が書かれています。あなたはこの種の質問のために、何年も勉強して多くの本を読んでいるので、SOの答えを受け取ることを期待してはいけません。 – mudasobwa
OPは、すべてのクラスを 'Hash'からサブクラス化し、インスタンス変数名と値をキーと値のペアとして格納することを暗黙のうちに示唆しているようです。実際には、JavaScriptはいくらか似ています。 – sawa
短い答え:Rubyは[プロトタイプベースの言語](https://en.wikipedia.org/wiki/Prototype-based_programming)ではないためです。 –