Im Allgemeinen sollten Sie versuchen, um Ihre Data-In-Logik von der Datenvalidierung und späteren Verarbeitung zu trennen. Auf diese Weise beschäftigen sich Ihre Methoden jeweils nur mit einer Sache, wodurch sie viel einfacher zu verstehen und damit robuster sind.
Hier stellen wir eine valid_date_string?
Methode vor, die prüft, ob das übergebene input
Objekt eine gültige Datumszeichenkette ist.
require 'date'
def valid_date_string?(input)
# First, we check that the given input is of the expected type.
# We do this here explicitly since we are validating a String. Most
# of the time, you would rely on duck typing instead.
return false unless input.is_a?(String)
# Then, we ensure roughly valid syntax (i.e. it looks like a date)
return false unless input =~ /\A\d+-\d+-\d+\z/
# Then, we "parse" it and split it into an array of year, month, day...
parts = input.split('-').map(&:to_i)
# ...and validate that this represents a valid date
Date.valid_date?(*parts)
end
In dieser Lösung passte ich auf Ausnahmen für Programmablauf verlassen nicht, da dies in der Regel verpönt ist, wie es in unentdeckten Fehlern führen kann und ein schlechte Leistung.
Wir haben dann diese Methode in einem gewissen Eingangsschleife verwenden, um den Benutzer zur Eingabe von
def get_valid_date
loop do
input = gets.chomp
return input if valid_date_string?(input)
# Here, the user entered an invalid date. We can now do our
# error handling and try again.
puts "Invalid date given. Please try again..."
end
end
my_valid_date_string = get_valid_date
ty für die Eingabe, einen gewissen Wert sein viel –