10.16. Wywołania kontraktowane

Podziękowania dla Maurice’a Codika

Problem

Chcemy weryfikować spełnienie warunków narzuconych na postać argumentów wywołań metod, lecz chcemy czynić to w sposób efektywny, bez potrzeby tworzenia dużych porcji kodu.

Rozwiązanie

Warunki narzucone na postać argumentów wywołania stanowią formę kontraktu między metodą wywołującą a wywoływaną. Spełnienie wymogów tego kontraktu może być weryfikowane przez poniższy moduł.

module Contracts def valid_contract(input) if @user_defined and @user_defined[input] @user_defined[input] else case input when :number lambda { |x| x.is_a? Numeric } when :string lambda { |x| x.respond_to? :to_str } when :anything lambda { |x| true } else lambda { |x| false } end end end class ...

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.