È possibile aggiungere guard all'inizio della funzione e generare un'eccezione se gli argomenti non sono validi. Per esempio:
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
Si potrebbe definire custom exception classe se non si desidera utilizzare il ArgumentError
Se si sta costruendo qualcosa di simile a un quadro, poi, si può fare uso di meta- tecniche di programmazione per intercettare le invocazioni dei metodi e applicare alcune convalide. Fare riferimento a Executing code for every method call in a Ruby module. Potrebbe essere necessario creare una sorta di DSL per esprimere tali convalide: un tipico esempio di convalida DSL è Active Record Validations in Rails.
In breve, per casi di utilizzo quotidiano, è sufficiente il numero di serie raise
(or fail
) e rescue
. Le meta- grammazioni e le convalide basate su DSL sono necessarie solo se si sta costruendo un framework per scopi generali.
fonte
2016-01-06 16:10:24
Non si può mettere tali vincoli direttamente nella definizione dei parametri. Puoi fare un controllo nella prima riga del corpo del metodo: 'raise: qualunque cosa se numero <2'. – ndn
@ndn, mi permetto di dissentire. Per favore vedi la mia risposta. –