In Sinatra, utilizzo i parametri per far passare la chiave/il valore attraverso la stringa di query dell'URL. Ho notato che posso usare una stringa o un simbolo come chiave per ottenere il valore. Quindi, se l'URL è:Come accedere ai parametri di Sinatra usando un simbolo?
http://localhost:4567/x?a=1&b=2
Poi:
params[:a] # => "1"
params["a"] # => "1"
params.to_s # => '{"name"=>"x", "a"=>"1", "b"=>"2"}'
params.class # => Hash
posso dire params è un hash. Ma questo non sembra essere un comportamento comune di un hash.
h = {"a" => "1", "b" => "2"}
h["a"] # => "1"
h[:a] # => nil
Qualcuno può spiegare come questo si ottiene attraverso Sinatra?
Non so se questo è possibile con Ruby, ma se potessero scavalcare il metodo di accesso ad hash ('[]'), non sarebbe meglio consentire a questo metodo di convertire i simboli in stringhe piuttosto che duplicare ogni paio? Sembra una scelta di design relativamente costosa per i benefici che offre. – MarioDS
La [implementazione attuale] (https://github.com/sinatra/sinatra/blob/6ce8a94005397695f0fd2cc241cd09fb325dd567/lib/sinatra/base.rb#L1060-L1062) è molto più leggera: 'Hash.new {| hash, key | hash [key.to_s] se Symbol === key} ', ovvero se la chiave è un simbolo, prova con la versione String della chiave. –