Ruby圆括号调用语法

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

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

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

 class Thing attr_accessor :name, :age def call(*args) puts args.inspect end end Thing.new.(:name, :age) # => [:name, :age] 

那么为什么jbuilder会出现一个self

self here只是传递给Jbuilder call方法的参数。

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