V mailing listu se objevil dotaz jak implementovat slovník který není citlivý na velikost písmen. T.j kde h['a'] je stejný prvek jako h['A'].
Nejjednodušší navržený způsob je předefinovat metodu has_ikey? takto
class Hash
def has_ikey?(key)
self.keys.map {|key| key.upcase }.member? key.upcase
end
endVelikou nevýhodou tohoto řešení je pomalost, tedy výpočetní naročnost degraduje použití slovníku.
Jiným řešením je změnit chování Ruby nastavením proměnné $=
$= = true # case insensitive
tento způsob však ovlivní všechny části Ruby.
Asi nejlepším řešením je definovat si vlastní třídu objektů s požadovanou vlastností
class CIHash < Hash
alias get_old []
alias set_old []
def [](key)
return get_old(key.to_s.upcase)
end
def []=(key, value)
return set_old(key.to_s.upcase, value)
end
end
