Warning 모듈
Warning 모듈
Warning 모듈은 Ruby가 내보내는 모든 경고(warning)를 처리하는 중심점이에요. 이 모듈에는 warn이라는 메서드가 하나 있고, 모듈이 자기 자신을 extend해서 Warning.warn 형태로 호출할 수 있게 되어 있어요. Ruby가 경고를 발생시킬 때마다 기본적으로 Warning.warn이 호출되고, 기본 동작은 $stderr로 경고를 출력하는 것이에요.
본문
Warning.warn의 동작을 바꾸면 경고를 어떻게 처리할지 커스터마이즈할 수 있어요. 예를 들어 특정 경고만 걸러내거나, $stderr가 아닌 다른 곳으로 출력하고 싶을 때가 대표적이죠.
동작을 바꾸려면 Warning.extend(MyNewModuleWithWarnMethod)처럼 확장하면 되고, 기존의 $stderr 출력 동작을 유지하고 싶은 부분에서는 super를 호출하면 돼요.
module MyWarningFilter
def warn(message, category: nil, **kwargs)
if /some warning I want to ignore/.match?(message)
# 무시
else
super
end
end
end
Warning.extend MyWarningFilter
주의할 점은 인스턴스 메서드인 Warning#warn을 직접 재정의하면 안 된다는 거예요. 그렇게 하면 기본 동작($stderr 출력)을 super로 돌려받을 방법이 사라져 버리거든요.
경고를 손쉽게 다루고 싶다면 표준 라이브러리는 아니지만, warning gem이 편리한 커스터마이즈 방법을 제공해요.
Public Class Methods
Warning.
category에 대한 경고 표시 여부 플래그를 반환해요. 지원하는 카테고리는 다음과 같아요.
:deprecated— 더 이상 쓰이지 않는(deprecated) 기능에 대한 경고예요. 예를 들어$,·$;에nil이 아닌 값을 할당하는 것, 키워드 인자 관련 폐기 등이 해당해요.:experimental— 실험적 기능에 대한 경고예요.:performance— 성능에 대한 힌트예요. 예를 들어 Shape 변형 한도와 관련된 경고가 해당해요.
Warning.[]=(category, flag)
category의 경고 플래그를 설정해요. 어떤 카테고리가 있는지는 Warning.[] 항목을 참고하면 돼요. 특정 경고를 끄고 싶을 때 Warning[:deprecated] = false처럼 쓰면 그 카테고리의 경고가 출력되지 않아요.
Warning.categories
지원하는 카테고리 심볼들의 목록을 배열로 돌려줘요. 어떤 카테고리가 지원되는지 동적으로 알고 싶을 때 사용해요.
Public Instance Methods
Warning.warn(msg)
경고 메시지 msg를 $stderr에 써요. Ruby가 발생시키는 모든 경고에 대해 호출되는 메서드예요. 경고에 category를 함께 지정할 수도 있어요. 이 메서드를 어떻게 커스터마이즈하는지는 Warning 모듈 문서를 참고하면 돼요.