2016-08-26 3 views
3
def respond_to?(method, include_private = false) 
    super || @subject.respond_to?(method, include_private) 
end 

|| является оператором or, так что же означает || между методами?Что делает || между методами?

Будет ли всегда вызывать super если только super возвращает NIL, то оценить @subject.respond_to из-за короткого замыкания для оператора ||?

Редактировать: Я думаю, что мой вопрос не является дубликатом, потому что я знаю, как «||» оператор работает с другими языками программирования. Я знаю, что такое короткое замыкание. Я просто никогда не видел, чтобы он использовался только с двумя способами, без каких-либо утверждений.

+0

Да, это в основном правильно. За исключением того, что 'false' также является ложным значением. –

+0

Это верно, если унаследованный/родительский класс определяет response_to или возвращает nil или false, тогда будет оцениваться '@ subject.respond_to?'. – codyeatworld

+0

Возможный дубликат [Понимание «||» OR в условных выражениях If в Ruby] (http://stackoverflow.com/questions/1554340/understanding-the-or-operator-in-if-conditionals-in-ruby) – halfelf

ответ

4

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

A || B означает:

  • оценки A
  • , если A == false или A == nil
    • оценки B
    • возвращает значение B как значение выражения A || B
  • в противном случае возвращает значение A как значения A || B экспрессии
+1

'A == 0' является правдой –

Смежные вопросы