특수한 상황에 자동으로 호출되는 매크로를 훅이라고 합니다. inherited, included, extended, method_missing입니다.

  • inherited는 하위 클래스가 정의될 경우 컴파일 시간에 호출됩니다. @type은 상속을 받는 하위 타입입니다.
  • included는 모듈이 포함될 경우 컴파일 시간에 호출됩니다. @type은 포함하는 하위 타입입니다.
  • extended는 모듈이 확장될 경우 컴파일 시간에 호출됩니다. @type은 확장하는 하위 타입입니다.
  • method_missing은 메서드를 찾지 못한 경우 컴파일 시간에 호출됩니다.

다음은 inherited의 예시입니다.

class Parent
  macro inherited
    def lineage
      "{{@type.name.id}} < Parent"
    end
  end
end

class Child < Parent
end

Child.new.lineage #=> "Child < Parent"

다음은 method_missing의 예시입니다.

macro method_missing(call)
  print {{call.name.id.stringify}}, " 호출, 인자는 ", {{call.args.size}}, "개", '\n'
end

foo          # 출력: foo 호출, 인자는 0개
bar 'a', 'b' # 출력: bar 호출, 인자는 2개

results matching ""

    No results matching ""