2015-11-01 89 views
0

came across这个方法,其中到底.call用于:.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 

the docs真的不给我的时候/如何使用.call理解。

+0

'@ allow_all'的Key如果设置包含TRUE;。 –

+4

但是,如果它不是“真”,它包含从(哈希?)检索的过程。当你想调用(即执行)proc时使用'call'。这是命令模式的一个版本,其中“命令”名称是控制器和操作名称的数组。该文件似乎很清楚。 –

+0

当问这样一个问题时,在问问题之前自己展示你做了什么工作来回答这个问题是非常重要的。你读了什么?你尝试了什么?事实上,很难说你在问之前研究了这个问题。 –

回答

2

对于没有.call方法
.call的想法的人是调用/执行Proc/Method实例的方法。下面的例子可能会让你更加清楚

m = 12.method("+") 
# => `method` gets the `+` method defined in `Fixnum` instance 
# m.class 
# => Method 

m.call(3) #=> 15 
# `3` is passed inside the `+` method as argument 
m.call(20) #=> 32 

在上例中; Fixnum 12具有+定义

在示例你张贴

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_actions[[controller.to_s, action.to_s]]返回一个Proc实例和resourceparam/argument到方法调用方法。

例如

hash = {[:controller, :action] => 'value'} 
# => {[:controller, :action]=>"value"} 

> hash[[:controller,:value]] 
# => nil 

> hash[[:controller,:action]] 
# => "value" 

FYI:在Ruby中,你可以有ArrayHash对象