2311 Stimmen

Wie man eine switch-Anweisung in Ruby schreibt

Wie schreibe ich eine switch Anweisung in Ruby?

22voto

Alexander Punkte 6666

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])

21voto

Sonu Oommen Punkte 1023

Seit switch case immer ein einzelnes Objekt zurückgibt, können wir das Ergebnis direkt ausdrucken:

puts case a
     when 0
        "It's zero"
     when 1
        "It's one"
     end

20voto

123 Punkte 764

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

3 Stimmen

Warum nicht einfach case some_string, when /\d/, (stuff), when /[a-zA-Z]/, (stuff), end (wobei , bedeutet Zeilenumbruch)

2 Stimmen

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.

1 Stimmen

@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.

14voto

Vaisakh VM Punkte 993

Sie können schreiben case Ausdrücke auf zwei verschiedene Arten in Ruby:

  1. Ähnlich wie bei einer Reihe von if Aussagen
  2. Geben 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

0 Stimmen

Auch wenn Ihr Code die Frage beantworten könnte, sollten Sie zumindest eine kurze Beschreibung hinzufügen, was Ihr Code tut und wie es löst das ursprüngliche Problem.

11voto

Navin Punkte 618

Sie können dies auch auf natürlichere Weise tun,

case expression
when condtion1
   function
when condition2
   function
else
   function
end

CodeJaeger.com

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.

Powered by:

X