模块 Errno

当操作系统遇到错误时,通常会将错误报告为整数错误代码

$ ls nosuch.txt
ls: cannot access 'nosuch.txt': No such file or directory
$ echo $? # Code for last error.
2

当 Ruby 解释器与操作系统交互并接收到这样的错误代码(例如,2)时,它会将该代码映射到特定的 Ruby 异常类(例如,Errno::ENOENT

File.open('nosuch.txt')
# => No such file or directory @ rb_sysopen - nosuch.txt (Errno::ENOENT)

每个这样的类都是

因此

Errno::ENOENT.superclass # => SystemCallError
Errno::ENOENT::Errno     # => 2

嵌套类的名称由方法 Errno.constants 返回

Errno.constants.size         # => 158
Errno.constants.sort.take(5) # => [:E2BIG, :EACCES, :EADDRINUSE, :EADDRNOTAVAIL, :EADV]

如上所述,与每个类关联的错误代码作为常量的值可用;特定类的值可能因操作系统而异。如果特定操作系统不需要该类,则值为零

Errno::ENOENT::Errno      # => 2
Errno::ENOTCAPABLE::Errno # => 0