2015-11-01 42 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對象