理解Ruby中的地图

mxm*_*mxx 2 ruby methods dictionary

我是Ruby的新手,我正在尝试理解我遇到的map方法的一个例子:

{:a => "foo", :b => "bar"}.map{|a, b| "#{a}=#{b}"}.join('&')
Run Code Online (Sandbox Code Playgroud)

返回:

=> "a=foo&b=bar"
Run Code Online (Sandbox Code Playgroud)

我不明白怎么回事

b=bar
Run Code Online (Sandbox Code Playgroud)

退回.字符串插值让我感到困惑,因为它似乎会返回如下内容:

=> "a=foo&bbar"
Run Code Online (Sandbox Code Playgroud)

Gag*_*ami 7

> {:a => "foo", :b => "bar"}.map{|key, value| "#{key}=#{value}"}
#=> ["a=foo", "b=bar"]
Run Code Online (Sandbox Code Playgroud)

map方法将获取hash的每个元素as keyvaluepair

"#{key}=#{value}"是一个字符串插值,它=在你key和你之间添加value

使用这种语法,开放#{和结束}位之间的所有内容都被评估为Ruby代码,并且此评估的结果将嵌入到它周围的字符串中.

Array#join将返回通过将数组的每个元素转换为字符串而创建的字符串,该字符串由给定的分隔符分隔.

所以在你的情况下:

> ["a=foo", "b=bar"].join('&')
#=> "a=foo&b=bar" 
Run Code Online (Sandbox Code Playgroud)

Rails中,您可以使用Hash #to_query方法将哈希转换为查询参数,这将返回相同的结果.

 > {:a => "foo", :b => "bar"}.to_query
 #=> "a=foo&b=bar"
Run Code Online (Sandbox Code Playgroud)