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.