Wie schreibe ich eine switch
Anweisung in Ruby?
Warum nicht einfach case some_string, when /\d/, (stuff), when /[a-zA-Z]/, (stuff), end
(wobei ,
bedeutet Zeilenumbruch)
Je nach Fall können Sie es vorziehen, einen Hash von Methoden zu verwenden.
Wenn es eine lange Liste von when
s und jeder von ihnen hat einen konkreten Wert zum Vergleich (kein Intervall), ist es effektiver, einen Hash von Methoden zu deklarieren und dann die relevante Methode aus dem Hash auf diese Weise aufzurufen.
# Define the hash
menu = {a: :menu1, b: :menu2, c: :menu2, d: :menu3}
# Define the methods
def menu1
puts 'menu 1'
end
def menu2
puts 'menu 2'
end
def menu3
puts 'menu3'
end
# Let's say we case by selected_menu = :a
selected_menu = :a
# Then just call the relevant method from the hash
send(menu[selected_menu])
Mehrwertiger Fall und nicht-wertiger Fall:
print "Enter your grade: "
grade = gets.chomp
case grade
when "A", "B"
puts 'You pretty smart!'
when "C", "D"
puts 'You pretty dumb!!'
else
puts "You can't even use a computer!"
end
Und eine regulärer Ausdruck Lösung hier:
print "Enter a string: "
some_string = gets.chomp
case
when some_string.match(/\d/)
puts 'String has numbers'
when some_string.match(/[a-zA-Z]/)
puts 'String has letters'
else
puts 'String has no numbers or letters'
end
Warum nicht einfach case some_string, when /\d/, (stuff), when /[a-zA-Z]/, (stuff), end
(wobei ,
bedeutet Zeilenumbruch)
Oh, und der erste Teil ist bereits abgedeckt in diese Antwort und viele Antworten erwähnen bereits Regex. Ehrlich gesagt, diese Antwort fügt nichts Neues hinzu, und ich stimme ab und stimme für ihre Löschung.
@DoorknobofSnow Dies soll zeigen, dass man die Regex-Lösung und kommagetrennte Werte in switch case verwenden kann. Ich bin mir nicht sicher, warum Ihnen die Lösung so viel Kopfzerbrechen bereitet.
Sie können schreiben case
Ausdrücke auf zwei verschiedene Arten in Ruby:
if
AussagenGeben Sie ein Ziel neben dem case
und jede when
Klausel mit dem Ziel verglichen wird.
age = 20 case when age >= 21 puts "display something" when 1 == 0 puts "omg" else puts "default condition" end
oder:
case params[:unknown]
when /Something/ then 'Nothing'
when /Something else/ then 'I dont know'
end
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.