Ich möchte die Klasse Hash nativen Klammern in Ruby außer Kraft zu setzen.Wie kann ich überschreiben Hash nativen Klammern ([] access)
Hinweis Ich möchte sie nicht in einer Klasse überschreiben, die von Hash (keine Unterklasse) erbt, ich möchte Hash selbst überschreiben, so dass jeder Hash irgendwo mein Verhalten immer erben wird.
Speziell (Bonuspunkte für ..) - Ich möchte dies, um nativ emulieren Hash mit indifferent Zugriff. In JavaScript würde ich die prototype
ändern, Ruby ist bekannt für seine Metaprogrammierung, also hoffe ich, dass dies möglich ist.
Also, was ich bin mit dem Ziel für ist:
>> # what do I do here to overload Hash's []?...
>> x = {a:123} # x is a native Hash
>> x[:a] # == 123, as usual
>> x['a'] # == 123, hooray!
Ich habe versucht: 1)
class Hash
define_method(:[]) { |other| puts "Hi, "; puts other }
end
und
class Hash
def []
puts 'bar'
end
end
Beide Absturz irb.
Bitte zeigen, was haben Sie versucht, so weit –
uns zeigen, was haben Sie –
versucht Uh ... zwei Ansätze zum Beispiel (das kann nicht vom Boden aufkommen, irb stürzt ab, wenn man sie laufen lässt): 1) Klasse Hash; define_method (: []) {| andere | setzt "Hallo"; setzt andere} Ende 2) Klasse Hash; def [] (Schlüssel) setzt den Schlüssel; Ende erwähnenswert, dass es möglich ist, in einer Unterklasse außer Kraft zu setzen (http://stackoverflow.com/a/974442/954741), aber ich kann nicht verwalten nativen Hashes außer Kraft zu setzen. – sellarafaeli