8.3. Weryfikacja funkcjonalności obiektu

Problem

Chcemy sprawdzić, czy dany obiekt przydatny jest do określonych zastosowań.

Rozwiązanie

Jeśli chcesz wywoływać określoną metodę w stosunku do obiektu, sprawdź, czy obiekt na to wywołanie odpowiada:

def send_as_package(obj)
  if obj.respond_to? :package
    packaged = obj.package
  else
    if $DEBUG
      $stderr.puts "Nie wiem, jak spakować klasę #{obj.class}."
      $stderr.puts 'Spróbuj użyć rodzimego packagera.'
    end
    package = Package.new(obj)
  end
  send(package)
end

Jeśli natomiast obiekt musi być obiektem określonej klasy lub wykorzystywać musi kod określonego modułu, użyj predykatu is_a?:

def multiply_precisely(a, b) if a.is_a? Float or b.is_a? Float raise ArgumentError, "Nie da się precyzyjnie pomnożyć ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.