我在Python中有这个代码:
parameters = { 'a': 1, 'b': 2 }
urllib.urlencode(dict(itertools.chain(parameters.iteritems(), [('aaa', 'bbb')])))
Ruby中的等效代码是什么?我所知道的是,我必须使用CGI::escape
代替urllib.urlencode
。 parameters.iteritems()
- 可能是parameters.map
。剩下的是什么?
答案 0 :(得分:1)
您的Python代码输出:
a=1&b=2&aaa=bbb
在Ruby中,我们可以这样做:
require 'cgi'
parameters = {a: 1, b: 2}
encoded = parameters.merge(Hash[*['aaa', 'bbb']])
.map { |key, value| "#{CGI.escape key.to_s}=#{CGI.escape value.to_s}" }
.join('&')
p encoded
哪个输出相同:
a=1&b=2&aaa=bbb
它比Python代码更长,但恕我直言也稍微更具可读性......如果你想通过制作一个接受哈希而不仅仅是字符串的版本CGI::escape
,你可以缩短它。
答案 1 :(得分:0)
我是这样做的:
parameters.merge({ 'aaa' => 'bbb' }).map{ |k, v| "#{CGI.escape(k)}=#{CGI.escape(v)}" }.join("&")