Est-il possible d'utiliser une instruction case pour remplacer ces instructions if?Ruby Convertir les instructions If en cas
if (a%3 == 0) then puts "%3"
elsif (a%4 == 0) then puts "%4"
elsif (a%7 == 0 && a%13 == 0) then puts "%%"
Est-il possible d'utiliser une instruction case pour remplacer ces instructions if?Ruby Convertir les instructions If en cas
if (a%3 == 0) then puts "%3"
elsif (a%4 == 0) then puts "%4"
elsif (a%7 == 0 && a%13 == 0) then puts "%%"
case
when (a % 3).zero? then puts "%3"
when (a % 4).zero? then puts "%4"
when (a % 7).zero? && (a % 13).zero? then puts "%%"
end
ce n'est pas correct, il va imprimer «Nil» quand il ne tombe pas dans l'une de ces conditions, ce qui n'est pas le code original. – Verhogen
Vous avez raison. Il suffit de déplacer les puts dans la déclaration de cas. J'ai changé la réponse en conséquence. –
Bien sûr:
case
when (a%3 == 0) then puts "%3"
when (a%4 == 0) then puts "%4"
when (a%7 == 0 && a%13 == 0) then puts "%%"
end
Il est pas beaucoup mieux, est-il? ;-)
Je pense qu'il est, légèrement = p – Verhogen
(en% 7 == 0 & & de% 13 == 0) est égale à (a * 7% 13 == 0).
dans ruby, vous pouvez faire une instruction if-else sur une ligne, utiliser & & et ||.
puts (a%3 == 0)&&"%3"||(a%4 == 0)&&"%4"||(a%(7*13) == 0)&&"%%"||""
ou
log = (a%3 == 0)&&"%3"||(a%4 == 0)&&"%4"||(a%(7*13) == 0)&&"%%"
puts log if log
son look Agly mais court.
puts [3,4,91,10].collect do |a|
case 0
when a % 3 then
"%3"
when a % 4 then
"%4"
when a % 91 then
"%%"
end
end
Vous devriez pouvoir copier ce droit dans irb pour le voir fonctionner. S'il vous plaît pardonner le léger 7 * 13 = 91 hack, mais si vous travaillez avec des modulos réels, ils devraient être équivalents.
utilisant ProC# ===
def multiple_of(factor)
lambda{ |number| number.modulo(factor).zero? }
end
case a
when multiple_of(3): puts("%3")
when multiple_of(4): puts("%4")
when multiple_of(7*13): puts("%%")
end
Peut-être, mais il ne sera pas plus lisible. Pourquoi voulez-vous? –