Ruby点括号调用语法

时间:2014-10-27 02:54:05

标签: ruby function syntax parameters

我正在阅读jbuilder's 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]

那么为什么self电话中有jbuilder

1 个答案:

答案 0 :(得分:3)

self这里只是传递给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