En Sinatra, uso params para obtener la clave/valor pasado a través de la cadena de consulta URL. Noté que puedo usar una cadena o un símbolo como la clave para obtener el valor. Así que si la URL es:¿Cómo accedo a parametros de Sinatra usando un símbolo?
http://localhost:4567/x?a=1&b=2
continuación:
params[:a] # => "1"
params["a"] # => "1"
params.to_s # => '{"name"=>"x", "a"=>"1", "b"=>"2"}'
params.class # => Hash
que puedo decir params es un hash. Pero esto no parece ser un comportamiento común de un Hash.
h = {"a" => "1", "b" => "2"}
h["a"] # => "1"
h[:a] # => nil
¿Puede alguien explicar cómo se consigue esto a través de Sinatra?
No sé si esto es posible con ruby, pero si pudieran anular el método de acceso hash ('[]'), ¿no sería mejor permitir que este método convierta símbolos a cadenas en lugar de duplicar cada ¿par? Parece una opción de diseño relativamente caro por los beneficios que brinda. – MarioDS
La [implementación actual] (https://github.com/sinatra/sinatra/blob/6ce8a94005397695f0fd2cc241cd09fb325dd567/lib/sinatra/base.rb#L1060-L1062) es mucho más ligera: 'Hash.new {| hash, key | hash [key.to_s] if Symbol === key} ', lo que significa que si la clave es un Symbol, intente con la versión String de la clave. –