7
在Sinatra中,我使用params來獲取通過URL查詢字符串傳遞的鍵/值。我注意到我可以使用字符串或符號作爲獲取值的關鍵。因此,如果網址是:如何使用符號訪問Sinatra params?
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
我可以告訴params爲一個Hash。但是這似乎並不是哈希的常見行爲。
h = {"a" => "1", "b" => "2"}
h["a"] # => "1"
h[:a] # => nil
有人可以解釋如何通過Sinatra實現嗎?
我不知道這是否可能與紅寶石,但如果他們可以重寫哈希訪問方法('[]'),是不是更好,允許此方法將符號轉換爲字符串,而不是重複每對?看起來像是一個相對昂貴的設計選擇,它給了它什麼好處。 – MarioDS
[當前實現](https://github.com/sinatra/sinatra/blob/6ce8a94005397695f0fd2cc241cd09fb325dd567/lib/sinatra/base.rb#L1060-L1062)要輕得多:'Hash.new {| hash,key | hash [key.to_s] if Symbol === key}',這意味着如果密鑰是符號,請嘗試密鑰的字符串版本。 –