Sinatra'da, URL sorgu dizesinden geçirilen anahtar/değer almak için params kullanıyorum. Değeri elde etmek için anahtar olarak bir dize veya sembolü kullanabilirim. Yani URL ise: SonraSinatra paramlarına bir sembol kullanarak nasıl erişirim?
http://localhost:4567/x?a=1&b=2
:
params[:a] # => "1"
params["a"] # => "1"
params.to_s # => '{"name"=>"x", "a"=>"1", "b"=>"2"}'
params.class # => Hash
Ben params söyleyebilir bir Hash olduğunu. Ancak bu, bir Hash'ın ortak bir davranışı gibi görünmemektedir.
h = {"a" => "1", "b" => "2"}
h["a"] # => "1"
h[:a] # => nil
Birisi bunun Sinatra üzerinden nasıl gerçekleştirildiğini açıklayabilir mi?
Bunun rubi ile mümkün olup olmadığını bilmiyorum, ancak karma erişim yöntemini ('[]') geçersiz kılabilirlerse, bu yöntemin her yerine çoğaltmak yerine sembolleri dizelere dönüştürmesine izin vermek daha iyi olmaz mı? çift? Ne yararları için nispeten pahalı bir tasarım seçimi gibi görünüyor. – MarioDS
[Geçerli uygulama] (https://github.com/sinatra/sinatra/blob/6ce8a94005397695f0fd2cc241cd09fb325dd567/lib/sinatra/base.rb#L1060-L1062) çok daha açık: 'Hash.new {| karma, anahtar | hash [key.to_s], eğer Symbol === key} 'ise, anahtar bir Symbol ise, anahtarın String versiyonunu deneyin. –