2015-01-13 4 views
-4

У меня есть этот код в Python:Преобразование кода из Python Руби

parameters = { 'a': 1, 'b': 2 } 
urllib.urlencode(dict(itertools.chain(parameters.iteritems(), [('aaa', 'bbb')]))) 

Что эквивалентный код в Ruby? Я знаю, что я должен использовать CGI::escape вместо urllib.urlencode. parameters.iteritems() - возможно parameters.map. Что еще?

+3

StackOverflow не является услугой код перевода. Покажите нам, что вы пробовали, а затем задайте * конкретные * вопросы о * конкретных * проблемах, которые у вас есть. И в интересах тех, кто не говорит на Python, это помогло бы, если бы вы сказали нам, что код, который вы хотите нам написать для вас, даже делает. –

+0

@ JörgWMittag, тебе весело. –

ответ

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, но IMHO также немного читабельнее ... Вы могли бы сделать это короче, если бы захотели сделать версию CGI::escape который принимает хеш, а не только строки.

0

Я сделал это так:

parameters.merge({ 'aaa' => 'bbb' }).map{ |k, v| "#{CGI.escape(k)}=#{CGI.escape(v)}" }.join("&")