我正在阅读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
?
答案 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