Ce thème, la gestion des exceptions
Si vous êtes fidèle aux bases, vous répondrez par «expression régulière», mais j'aimerais répondre par «gestion des exceptions» pour mieux comprendre *** Ruby ***.
Motif si les trois lettres sont des chiffres
ruby1.rb
s = gets.chomp
puts (/[0-9]{3}/ === s ? s.to_i * 2 : 'error')
s = gets.chomp
puts (s.match(/[0-9]{3}/) ? s.to_i * 2 : 'error')
Motif si même un caractère est en lettres minuscules
ruby2.rb
s = gets.chomp
puts (/[a-z]/ === s ? 'error' : s.to_i * 2)
s = gets.chomp
puts (s.match(/[a-z]/) ? 'error' : s.to_i * 2)
Motif si même un caractère n'est pas un nombre
ruby3.rb
s = gets.chomp
puts (/[^0-9]/ === s ? 'error' : s.to_i * 2)
s = gets.chomp
puts (s.match(/[^0-9]/) ? 'error' : s.to_i * 2)
Ruby to_i (WA)
Motif avec to_i
appliqué directement
ruby4.rb
s = 'abc'
puts s.to_i # => 0
s = '42A'
puts s.to_i # => 42
Ruby Rational (AC)
Modèle avec Rational
appliqué
ruby5.rb
s = gets.chomp
begin
Rational(s)
rescue
puts 'error'
else
puts s.to_i * 2
end
La structure de contrôle pour la gestion des exceptions est la suivante.
rescue.rb
begin
#Traitement pouvant provoquer une exception
[rescue [error_type,..] [=> evar] [then]
#Que faire lorsqu'une exception se produit
[else
#Traitement lorsqu'une exception ne se produit pas]
[ensure
#Traitement exécuté indépendamment des exceptions]
end
begin
ʻelse ʻensure
est facultatif.
Bien que ce soit "Rational" qui n'est généralement pas utilisé, c'est une classe qui gère les nombres rationnels tels que "1/3".
to_r
interprète le premier nombre, mais Rational
semble bien soulever une exception.
ruby6.rb
puts '0x8'.to_r # => 0/1
puts Integer('0x8') # => 8
puts Float('0x8') # => 8.0
puts Complex('0x8') # => ArgumentError
puts Complex('08i') # => 0+8i
Complex
est une classe qui gère les nombres complexes, et une exception se produit dans 0x8
, mais les chaînes contenant ʻi` peuvent être contournées.
Est-il pénible d'utiliser to_i
pour la sortie standard, ou je pense qu'il vaut mieux utiliser des expressions régulières comme d'habitude.
Site référencé
Recommended Posts