Middle+
Millised mehhanismid on olemas projekti eraldi osa töö rikkumiseks?
sobes.tech AI
Vastus AI-lt
-
Erandid (Exceptions): Võimaldavad katkestada koodi täitmise, kui tekib viga, ja suunata juhtimine
begin/rescue/ensureplokkidele:begin # Kood, mis võib põhjustada vea result = 1 / 0 rescue ZeroDivisionError => e # Spetsiifilise vea töötlemine puts "Nulliga jagamise viga: #{e.message}" # Võimalik logimine või alternatiivne täitmine rescue StandardError => e # Muude standardsete vigade töötlemine puts "Muud vead: #{e.message}" ensure # Kood, mis täidetakse alati, olenemata vea olemasolust puts "Bloki lõpp" end -
Raise: Selge erandite esilekutsumine, nii standardsete kui ka kasutaja määratletud vigade klasside jaoks:
# Tavaline erandite esilekutsumine raise "Midagi läks valesti" # Erandite esilekutsumine konkreetse klassiga raise MyCustomError, "Kehtetu väärtus" -
exit,abort,Kernel#exit!: Programm lõpetamise meetodid:# Tavaline programmi lõpetamine exit(0) # 0 - edukas lõpetamine # Viga lõpetamine abort("Käivitus kriitilise vea tõttu") # Sunni lõpetamine Kernel.exit!(1) -
Thread#raise: Võimaldab teises niidis esile kutsuda erandi:
thread = Thread.new do begin loop { sleep 1 } rescue => e puts "Niit tabatud: #{e.class}" end end sleep 2 thread.raise StandardError, "Niit peatub" thread.join -
Programmilised vead (loogilised, süntaktilised): Valesti kirjutatud kood võib põhjustada tõrkeid:
# Süntaksiviga (puudub end) def my_method puts "Tere" # Loogiline viga (lõpmatu tsükkel) while true puts "Tsükkel" end -
Operatsioonisüsteemi signaalid (SIGTERM, SIGINT ja teised): Võivad katkestada programmi täitmise väljastpoolt:
# Lihtne näide SIGINT (Ctrl+C) töötlemisest Signal.trap("INT") { puts "\nSIGINT tabatud. Lõpetan..."; exit } loop { sleep 1 } -
Väited (Assertions) (eriti arenduse ja testimise ajal): Kontrollimehhanismid, mis, rikkudes tingimusi, viskavad välja erandi:
# Näide MiniTest raamatukoguga require 'minitest/autorun' class MyTest < Minitest::Test def test_jagamist # Väide: 4 jagatud 2-ga on 2 assert_equal 2, 4 / 2 # Väide: jagamine nulliga viskab ZeroDivisionError assert_raises(ZeroDivisionError) { 1 / 0 } end end