मैं रूबी में हैश क्लास देशी ब्रैकेट को ओवरराइड करना चाहता हूं।मैं हैश देशी ब्रैकेट ([] पहुंच) को कैसे ओवरराइड कर सकता हूं
नोट मैं उन वर्गों में ओवरराइड नहीं करना चाहता हूं जो हैश (कोई सबक्लासिंग) से विरासत में नहीं हैं, मैं वास्तव में हैश को ओवरराइड करना चाहता हूं, जैसे कि कहीं भी हैश कहीं भी मेरे व्यवहार का वारिस करेगा।
विशेष रूप से (के लिए बोनस अंक ..) - मैं इसे हैश को उदासीन पहुंच के साथ मूल रूप से अनुकरण करने के लिए चाहता हूं। जावास्क्रिप्ट में मैं prototype
संशोधित करता हूं, रूबी अपने मेटाप्रोग्रामिंग के लिए जाना जाता है, इसलिए मुझे उम्मीद है कि यह संभव है।
तो क्या मैं के लिए लक्ष्य कर रहा हूँ:
>> # 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!
मैं कोशिश की है: 1)
class Hash
define_method(:[]) { |other| puts "Hi, "; puts other }
end
और
class Hash
def []
puts 'bar'
end
end
दोनों दुर्घटना आईआरबी।
कृपया दिखाती हैं, जो आप अब तक की कोशिश की है –
हमें दिखा क्या आप –
उह ... उदाहरण के लिए दो दृष्टिकोण की कोशिश की है (जो जमीन से उतर नहीं सकते हैं, उन्हें चलाने के दौरान irb क्रैश): 1) कक्षा हैश; define_method (: []) {| अन्य | "हाय," रखता है; अन्य} अंत 2) कक्षा हैश; def [] (कुंजी) कुंजी रखता है; अंत यह ध्यान देने योग्य है कि उप-वर्ग (http://stackoverflow.com/a/974442/954741) में ओवरराइड करना संभव है, लेकिन मैं मूल हैश को ओवरराइड करने का प्रबंधन नहीं कर सकता। – sellarafaeli