.call() 方法如何工作?

Fel*_*ger 4 ruby ruby-on-rails railscasts

我正在根据Railscasts 剧集在应用程序中实施授权。

在其中一个实例方法中,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
Run Code Online (Sandbox Code Playgroud)

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

saw*_*awa 6

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

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

m = "hello".method(:concat)
m.call(" world")
# => "hello world"
Run Code Online (Sandbox Code Playgroud)

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