2013-09-10 5 views
0

Я выполняю авторизацию в приложении в соответствии с this Railscasts episode.Как работает метод .call()?

В одном из методов экземпляра Райан Бейтс использует метод .call, и я не понимаю, что именно он делает. This is the code for the whole model. И это специфический метод:

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 должно быть логическое значение.

+2

Видимо, 'разрешено' также может быть proc. Посмотрите на определение ('@allowed_actions [[controller.to_s, action.to_s]]'). –

+0

'allowed' также может быть объектом * метода * .Check' p allowed.instance_of? (Method) '... –

+1

Я предполагаю, что для понимания этого мне нужно понять Proc. И чтобы понять Proc, я полностью должен понимать закрытие. И чтобы понять закрытие, мне лучше взять недельный перерыв и купить несколько книг. Прошу прощения за плохой вопрос. –

ответ

4

call оценивает приемник процесса или метода, передавая ему свои аргументы.

Он используется, чтобы перезвонить фрагмент кода, который был передан как объект.