Ruby点括号调用语法

Dor*_*ian 5 ruby parameters syntax function

我正在阅读jbuilder的README并看到这些代码:

class Person
  # ... Class Definition ... #
  def to_builder
    Jbuilder.new do |person|
      person.(self, :name, :age)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我试图自己复制它,它要求一个call方法,所以:

class Thing
   attr_accessor :name, :age

   def call(*args)
     puts args.inspect
   end
end

Thing.new.(:name, :age) # => [:name, :age]
Run Code Online (Sandbox Code Playgroud)

那么,为什么有一个selfjbuilder电话吗?

xda*_*azz 4

self这里只是传递给 Jbuildercall方法的一个参数。

Jbuilder需要 的实例person(在self代码中)和属性名称(:name:age代码中)来生成 json 数据。

例子:

class Thing
   attr_accessor :name, :age

   def call(*args)
     puts args.inspect
   end
end

class Bar
  def to_thing
    Thing.new.(self, :name, :age)
  end
end

Bar.new.to_thing
Run Code Online (Sandbox Code Playgroud)