方法`method`在`& Unit.method(:new)`中做了什么?

时间:2016-06-20 14:03:34

标签: ruby-on-rails ruby

我是Rails的新手并试图找出我给出的代码。方法method&Unit.method(:new)中的作用是什么? &的含义是什么?单元模型中没有方法method,并且想知道为什么它可以存在。最后,我想符号:new会创建一个Unit的新对象?

class Unit
  include ActiveModel::Model

  attr_accessor :number 
end


class Product
  include ActiveModel::Model
  .........
  .........
  def units=(values)
    @units = values.map(&Unit.method(:new))
  end
end

1 个答案:

答案 0 :(得分:8)

方法method在类Object中定义,因此可用于所有对象。它以方法的名称作为参数,并返回一个Method对象,可用于反映或调用给定的方法。

因此Unit.method(:new)会为您提供一个代表方法Method的{​​{1}}对象。

现在,一元Unit.new运算符使用&对象或可以使用Proc转换为Proc的对象(to_proc个对象可以)然后将其转换为阻止。

因此Method会创建一个调用&Unit.method(:new)方法的块,使Unit.new等效于:

values.map(&Unit.method(:new))