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应该是一个布尔值。
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)
它用于回调作为对象传递的一段代码。