بدائل للتجزئة # المؤشر الذي يعمل دون سابق إنذار في كل من روبي 1.8 و 1.9
سؤال
ولقد حصلت على بعض التعليمات البرمجية روبي أنني تحويل الى Ruby 1.9. واحد التحذير أحصل هو Hash#index is deprecated; use Hash#key
ولكن لم يتم تعريف تجزئة # مفتاح في روبي 1.8، لذلك لا يمكن استخدام ذلك مباشرة. هل لدى أي شخص بديل جيد؟
ولقد حصلت على زوجين من الخيارات (التي أنا ما بعد كما أجوبة حتى تتمكن من التصويت)، ولكن أنا على أمل للأفضل.
المحلول
ويمكنك أيضا عكس التجزئة:
{ :hello => :world }.invert[:world] # ==> :hello
ولا قرد الترقيع أو الاعتماد على الخارج، ولكن ربما أقل كفاءة بالنسبة لمعظم الأغراض.
نصائح أخرى
وخيار آخر هو monkeypatch:
class Hash
alias_method(:key, :index) unless method_defined?(:key)
end
واحتمال واحد هو:
(hash.respond_to?(:key) ? hash.key(t) : hash.index(t))
ولكن هذا الإجمالي، ويضيف في سماء المنطقة.
وانها قبيحة بدلا من ذلك، ولكنه يعمل أيضا:
h = { :a => 1 }
[:key,:index].find{|method| break h.send(method, 1) if h.respond_to?(method) }
لا تنتمي إلى StackOverflow