Możesz dodać guard na początku funkcji i zgłosić wyjątek, jeśli argumenty są niepoprawne. Na przykład:
def my_method(number)
fail ArgumentError, "Input should be greater than or equal to 2" if number < 2
# rest of code follows
# ...
end
# Sample run
begin
my_method(1)
rescue => e
puts e.message
end
#=> Input should be greater than or equal to 2
można zdefiniować custom exception klasę, jeśli nie chcesz korzystać z ArgumentError
Jeśli budujesz coś jak ramy, wówczas można skorzystać z meta- techniki programowania służące do przechwytywania wywołań metod i stosowania niektórych sprawdzeń. Patrz Executing code for every method call in a Ruby module. Być może trzeba będzie wymyślić jakiś rodzaj DSL, aby wyrazić te walidacje - typowy przykład sprawdzania poprawności DSL to Active Record Validations w Railsach.
Podsumowując, w przypadku codziennego użytku powinny wystarczyć proste raise
(or fail
) i rescue
. Meta-programowanie i walidacje oparte na DSL są potrzebne tylko wtedy, gdy budujesz strukturę ogólnego przeznaczenia.
Nie można stawiać takich ograniczeń bezpośrednio w definicji parametrów. Możesz wykonać sprawdzenie w pierwszym wierszu ciała metody: 'raise: cokolwiek, jeśli liczba <2'. – ndn
@ndn, Błagam o różnicę. Proszę zobaczyć moją odpowiedź. –