x = StandardError.new(:hello)
y = StandardError.new(:hello)
x == y # => true
x === y # => true
begin
raise x
rescue x
puts "ok" # gets printed
end
begin
raise x
rescue y
puts "ok" # doesn't get printed
end
Warum wird das zweite "ok" nicht gedruckt? Ich kann es nicht herausfinden. Ich habe here gelesen, dass Ruby den ===
Operator benutzt, um Ausnahmen zu den Rettungsklauseln zusammenzubringen, aber das ist angeblich nicht der Fall.Was ist falsch an diesem Rettungsbeispiel?
Ich bin mit Ruby 1.9.3
EDIT: Also es so scheint nach raise x
, x == y
und x === y
nicht mehr tun halten. Es scheint, weil x
und y
no longer have the same backtrace.
, das heißt, "fängt jede Standarderror und Subklassen, und legt die Instanz in die Variable y". 'y' wird nicht als Wert interpretiert (wie ich es möchte), sondern als Variablenname. – Norswap
Ich denke, wenn Sie versuchen, Muster Übereinstimmungen auf RFID-Tags zu tun, ist die "Raise/Catch" Idiom möglicherweise nicht der beste Weg zu gehen. Was ist mit einer 'Fall'-Anweisung oder einem dynamischen Versand mit Mustern? –
Die Anwendung verfügt über eine "Low-Level" -Logik, die mit der Karte kommuniziert. Hier werden die Ausnahmen ausgelöst. Darüber hinaus gibt es eine höhere Anwendungslogik. Einige der vom Tag zurückgegebenen Fehler sind tatsächlich ziemlich hoch (z. B. "die Datei ist bereits auf dem Tag vorhanden") und muss dem Benutzer wieder zur Verfügung gestellt werden. Ausnahmen scheinen die beste Option dafür zu sein. – Norswap