0

我正在根据这个 Railscasts episode在应用程序中实施授权。

在其中一个实例方法中,Ryan Bates 正在使用 .call 方法,我不明白它到底在做什么。这是整个模型的代码。这是特定的方法:

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

资源参数是一个实例对象,局部变量allowed应该是一个布尔值。

4

1 回答 1

4

call评估将其参数传递给它的过程或方法接收器。

pr = ->a{a.map(&:upcase)}
pr.call(%w[hello world])
# => ["HELLO", "WORLD"]

m = "hello".method(:concat)
m.call(" world")
# => "hello world"

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

于 2013-09-10T11:59:28.500 回答