单个变量名称在ruby中意味着什么?

时间:2017-05-26 11:02:00

标签: ruby

在某些代码中,我发现:

class Job
  @@types = [:a, :b, :c, :d].reduce({}) do |acc, cmd|
    acc[cmd] = cmd.to_s
    acc
  end
  # ...
end
  1. reduce没有传递任何内容。这是什么意思?
  2. 只有一个acc。这是什么意思?

3 个答案:

答案 0 :(得分:6)

    使用空哈希调用
  1. reduce。这意味着第一次调用该块时acc的值为{}

  2. 在Ruby中,函数中的最后一个语句是返回值,因此该块返回acc

  3. 您可能需要阅读reduce完全理解此代码的内容。

答案 1 :(得分:1)

  
      
  1. 没有任何内容传递到reduce。这是什么意思?
  2.   

那不是真的。有一个位置参数{}传递给reduce以及一个块。

但即使没有通过任何事情,最重要的是什么?没有任何东西被传递到to_s,但不知怎的,这似乎不会打扰你。

  
      
  1. 只有一个acc。这是什么意思?
  2.   

这意味着与之前的acc相同:取消引用变量。

答案 2 :(得分:0)

阅读documentation for reduce

第一个参数({})是acc的初始参数,accreduce完成时返回的参数。

它只是将数组转换为哈希值,最终结果是:

{:a=>"a", :b=>"b", :c=>"c", :d=>"d"}