Что такое оператор <= в классах Ruby? - PullRequest
8 голосов
/ 23 июля 2010

следующий фрагмент кода с рельсов

  def rescue_from(*klasses, &block)
    options = klasses.extract_options!

    unless options.has_key?(:with)
      if block_given?
        options[:with] = block
      else
        raise ArgumentError, "Need a handler. Supply an options hash that has a :with key as the last argument."
      end
    end

    klasses.each do |klass|
      key = if klass.is_a?(Class) && klass <= Exception
        klass.name
      elsif klass.is_a?(String)
        klass
      else
        raise ArgumentError, "#{klass} is neither an Exception nor a String"
      end

      # put the new handler at the end because the list is read in reverse
      self.rescue_handlers += [[key, options[:with]]]
    end
  end
end

Обратите внимание на оператора <= </p>

что это?

Ответы [ 4 ]

12 голосов
/ 23 июля 2010

См. http://ruby -doc.org / core / classes / Module.html # M001669 для документации по всем операторам сравнения, предоставляемым модулями (и, следовательно, классами).

В этом конкретном случае: «Возвращает true, если mod является подклассом другого или совпадает с другим. Возвращает nil, если между ними нет взаимосвязи. (Подумайте об этом в терминах определения класса:« class A

6 голосов
/ 23 июля 2010

Это сравнимо с методом is_a?, который возвращает true, если класс получателя является подклассом аргумента;рассмотрим:

Fixnum.superclass # => Integer
Fixnum <= Integer # => true
3 голосов
/ 23 июля 2010

это оператор для "LHS - это тот же класс, что и подкласс RHS".<является оператором для "LHS является подклассом RHS."по крайней мере, это соответствует в этом смысле. </p>

(LHS: левая сторона, RHS: правая сторона)

1 голос
/ 23 июля 2010

Уверен, это означает, что класс является типом исключения.

Как правило, это означает «меньше или равно». Так что в этом коде может быть сказано, если это хотя бы класс, но не исключение ... сделать что-нибудь. Но тогда архитектура «меньше чем» будет неуместна.

Из документации по коду

# Обработчики наследуются. Их ищут справа налево, от
# снизу вверх и вверх по иерархии. Обработчик первого класса за
# Какие исключения.is_a? (klass) имеет значение true - это тот, который был вызван, если есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...