Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

การทำความเข้าใจลำดับชั้นข้อยกเว้นทับทิม

ข้อยกเว้นเป็นเพียงคลาสใน Ruby ลำดับชั้นข้อยกเว้นข้อยกเว้นประกอบด้วยคลาสทั้งหมดที่สืบทอดมาจากข้อยกเว้น

นี่คือลำดับชั้นข้อยกเว้นสำหรับไลบรารีมาตรฐานของ Ruby 2.1

Exception
  NoMemoryError
  ScriptError
    LoadError
    NotImplementedError
    SyntaxError
  SecurityError
  SignalException
    Interrupt
  StandardError -- default for rescue
    ArgumentError
      UncaughtThrowError
    EncodingError
    FiberError
    IOError
      EOFError
    IndexError
      KeyError
      StopIteration
    LocalJumpError
    NameError
      NoMethodError
    RangeError
      FloatDomainError
    RegexpError
    RuntimeError -- default for raise
    SystemCallError
      Errno::*
    ThreadError
    TypeError
    ZeroDivisionError
  SystemExit
  SystemStackError

การใช้งานจริง

เหตุผลที่ข้อยกเว้นถูกจัดเป็นแผนผังคลาสคือเพื่อให้คุณสามารถกู้คืนประเภทข้อยกเว้นที่คล้ายกันได้อย่างง่ายดาย

ตัวอย่างเช่น พิจารณารหัส:

begin
  do_something
rescue StandardError => e
end

สิ่งนี้จะช่วยไม่เพียง แต่ StandardError เท่านั้น แต่ยังรวมถึงข้อยกเว้นใด ๆ ที่สืบทอดมาจากมัน นั่นเป็นข้อยกเว้นที่คุณสนใจมาก

ในโค้ดของคุณเอง คุณอาจมีข้อยกเว้นที่กำหนดเองทั้งหมดรับช่วงมาจากคลาสฐานเดียว:

module MyLib

  class Error < StandardError
  end

  class TimeoutError < Error
  end

  class ConnectionError < Error
  end

end

...

begin
  do_something
rescue MyLib::Error => e
  # Rescues any of the exceptions defined above
end