सिनात्रा में, मैं यूआरएल क्वेरी स्ट्रिंग के माध्यम से कुंजी/मान पारित करने के लिए पैरा का उपयोग करता हूं। मैंने देखा कि मैं मूल्य प्राप्त करने के लिए कुंजी के रूप में एक स्ट्रिंग या प्रतीक का उपयोग कर सकता हूं। तो अगर यह है:मैं प्रतीक का उपयोग करके सिनात्रा पैराम्स का उपयोग कैसे करूं?
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
मैं पैरामीटर बता सकते हैं एक हैश है। लेकिन यह हैश का एक आम व्यवहार प्रतीत नहीं होता है।
h = {"a" => "1", "b" => "2"}
h["a"] # => "1"
h[:a] # => nil
क्या कोई बता सकता है कि यह सिनात्रा के माध्यम से कैसे प्राप्त किया जाता है?
मुझे नहीं पता कि यह रूबी के साथ संभव है, लेकिन यदि वे हैश एक्सेस विधि ('[]') को ओवरराइड कर सकते हैं, तो यह बेहतर होगा कि इस विधि को प्रतीकों को प्रतीकों को बदलने के बजाय प्रत्येक को डुप्लिकेट करने की अनुमति न दें जोड़ी? यह अपेक्षाकृत महंगी डिज़ाइन पसंद की तरह लगता है कि यह क्या लाभ देता है। – MarioDS
[वर्तमान कार्यान्वयन] (https://github.com/sinatra/sinatra/blob/6ce8a94005397695f0fd2cc241cd09fb325dd567/lib/sinatra/base.rb#L1060-L1062) बहुत हल्का है: 'हैश.न्यू {| हैश, कुंजी | हैश [key.to_s] अगर प्रतीक === कुंजी} ', जिसका अर्थ है कि कुंजी एक प्रतीक है, तो कुंजी के स्ट्रिंग संस्करण के साथ प्रयास करें। –