SystemCallError
SystemCallError (시스템 호출 오류 예외)
SystemCallError는 저수준의 플랫폼 의존 오류 전부의 베이스 클래스예요. 현재 플랫폼에서 사용 가능한 오류들은 SystemCallError의 서브클래스이며 Errno 모듈 안에 정의돼 있어요.
File.open("does/not/exist")
이 코드를 실행하면 이런 예외가 올라와요.
Errno::ENOENT: No such file or directory - does/not/exist
출처: Ruby 4.0 API
본문
클래스 메서드 (Public Class Methods)
system_call_error === other → true or false
수신자가 일반 SystemCallError이거나, self와 other의 오류 번호(error number)가 같으면 true를 돌려줘요. case 문 등에서 패턴 매칭에 쓸 수 있어요.
new(msg, errno = nil, func = nil) → system_call_error_subclass
errno가 알려진 시스템 오류 코드와 일치하면 그 오류에 맞는 Errno 클래스를 만들고, 그렇지 않으면 일반 SystemCallError 객체를 만들어요. 오류 번호는 이후 errno 메서드로 접근할 수 있어요.
숫자만 주면 그 값을 Integer형 errno로 보고 msg는 생략돼요. 첫 인자를 msg로 쓰면 그 값을 추가 오류 메시지로 넣어요.
SystemCallError.new(Errno::EPIPE::Errno)
#=> #<Errno::EPIPE: Broken pipe>
SystemCallError.new("foo")
#=> #<SystemCallError: unknown error - foo>
SystemCallError.new("foo", Errno::EPIPE::Errno)
#=> #<Errno::EPIPE: Broken pipe - foo>
func가 nil이 아니면 메시지 뒤에 " @ "를 붙여 덧붙여요.
SystemCallError.new("foo", Errno::EPIPE::Errno, "here")
#=> #<Errno::EPIPE: Broken pipe @ here - foo>
SystemCallError의 서브클래스도 그 서브클래스의 new를 통해 직접 인스턴스화할 수 있어요. Errno를 참고하세요.
인스턴스 메서드 (Public Instance Methods)
errno → integer
이 SystemCallError의 오류 번호를 돌려줘요.