方法.call()如何工作?

时间:2013-09-10 11:02:15

标签: ruby-on-rails ruby railscasts

我正在根据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应该是一个布尔值。

1 个答案:

答案 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"

它用于回调一段作为对象传递的代码。