2014-10-27 85 views
4

我讀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] 

所以爲什麼在jbuilder調用中有self

回答

2

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