我正在根据this Railscasts episode在应用中实施授权。
在其中一个实例方法中,Ryan Bates正在使用方法.call,我不明白它到底在做什么。 This is the code for the whole model。这是特殊的方法:
def allow?(controller, action, resource = nil)
allowed = @allow_all || @allowed_actions[[controller.to_s, action.to_s]]
allowed && (allowed == true || resource && allowed.call(resource))
end
resource参数是一个实例对象,局部变量allowed
应该是一个布尔值。
答案 0 :(得分:4)
call
计算proc或方法接收器将其参数传递给它。
pr = ->a{a.map(&:upcase)}
pr.call(%w[hello world])
# => ["HELLO", "WORLD"]
m = "hello".method(:concat)
m.call(" world")
# => "hello world"
它用于回调一段作为对象传递的代码。