Natürlich können Sie manchmal Objekte und Hashes für die gleiche Sache verwenden. Speichern von Schlüsselwertpaar ob Objekte wie folgt aus:
[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"}
Aber diese Objekte bekommt wirklich nicht die ganze Kraft eines Objekts oriente Programmiersprache aus den Definitionen eines class/object und hash:
Ruby eine perfekte objektorientierte Programmiersprache. Die Merkmale der objektorientierten Programmiersprache sind:
Data Encapsulation:
Data Abstraction:
Polymorphism:
Inheritance:
Diese Eigenschaften haben in Object Oriented Rubin diskutiert.
Ein objektorientiertes Programm umfasst Klassen und Objekte. Eine Klasse ist der Entwurf, aus dem einzelne Objekte erstellt werden. In objektorientierten Begriffen sagen wir, dass Ihr Fahrrad eine Instanz der Klasse von Objekten ist, die als Fahrräder bekannt sind.
Nehmen Sie das Beispiel eines Fahrzeugs. Es besteht aus Rädern, Pferdestärken und Kraftstoff- oder Gastankkapazität. Diese Merkmale bilden die Datenelemente der Klasse Fahrzeug. Mit Hilfe dieser Merkmale können Sie ein Fahrzeug von anderen unterscheiden.
Ein Fahrzeug kann auch bestimmte Funktionen haben, wie z. B. Anhalten, Fahren, und Geschwindigkeitsüberschreitung. Auch diese Funktionen bilden die Datenelemente der Klasse Fahrzeug. Sie können daher eine Klasse als eine Kombination aus Merkmalen und Funktionen definieren.
und eine hash:
Ein Hash ist eine Sammlung von Schlüsselwert-Paaren wie folgt aus: "employee" => "Gehalt". Es ähnelt einem Array, nur dass die Indizierung über beliebige Schlüssel eines beliebigen Objekttyps erfolgt, keinen Integer-Index.
Also zum Speichern von Daten empfehle ich Ihnen einen Hash.
Auf der anderen Seite, wie in einem Kommentar die Zahl zeigte, dass in der Objektdarstellung Appers ist die Objekt-ID, aber mit wenigen Operationen hinzugefügt:
1) bitweise Verschiebung nach links:
5 << 1 # gives 10
2) bestanden
(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"
schließlich in ruby hexadeimal Sie die Hash-Darstellung eines Objekts wie folgt zu erreichen:
x.instance_variables.each {|var| hash[var.to_s.delete("@")] = x.instance_variable_get(var) }
'0x00 ...' ist '(object_id << 1) .to_s (16)' ('object_id', nach links verschoben um eine von 16 Ziffernbasen.) Über das, was das Objekt in OOP ist, gibt es Tonnen geschriebener Bücher. Sie sollten nicht erwarten, eine Antwort auf SO für diese Art von Fragen zu erhalten, denn diese Leute studieren Jahre und lesen viele Bücher. – mudasobwa
Das OP scheint implizit zu suggerieren, dass alle Klassen von 'Hash' subclassiert werden sollten und Instanzvariablennamen und -werte als Schlüssel/Wert-Paare in ihnen gespeichert werden sollten. In der Tat funktioniert JavaScript in etwa so. – sawa
Kurze Antwort: Weil Ruby keine prototypbasierte Sprache ist (https://en.wikipedia.org/wiki/Prototype-based_programming). –