Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails call()方法是如何工作的?_Ruby On Rails_Ruby_Railscasts - Fatal编程技术网

Ruby on rails call()方法是如何工作的?

Ruby on rails call()方法是如何工作的?,ruby-on-rails,ruby,railscasts,Ruby On Rails,Ruby,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 &&

我正在根据在应用程序中实现授权

在其中一个实例方法中,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
应该是一个布尔值。

call
计算将参数传递给它的过程或方法接收器

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

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

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

call
计算将其参数传递给它的过程或方法接收器

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

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

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

显然,
allowed
也可以是进程。查看定义(
@allowed_actions[[controller.to_s,action.to_s]]
)。
allowed
也可以是一个方法对象。检查
p allowed.instance_of?(method)
…我假设要理解这一点,我需要理解Proc。为了理解Proc,我必须完全理解闭包。为了理解闭包,我最好休息一周,买些书。很抱歉问了一个不好的问题。显然,
允许
也可以是一个过程。查看定义(
@allowed_actions[[controller.to_s,action.to_s]]
)。
allowed
也可以是一个方法对象。检查
p allowed.instance_of?(method)
…我假设要理解这一点,我需要理解Proc。为了理解Proc,我必须完全理解闭包。为了理解闭包,我最好休息一周,买些书。我很抱歉问了一个不好的问题。