미라 홈 페이지Mirah는 어떤 메타 프로그래밍 기능을 제공합니까?
미라가 컴파일시 메타 프로그래밍 및 매크로에 대한 다양한 메커니즘을 지원했다. Mirah에서는 역동적 인 언어에 대한 "오픈 클래스"느낌이 상당합니다.
하지만 구체적인 내용을 찾을 수 없습니다. 더 자세한 정보가있는 사람이 있습니까?
미라 홈 페이지Mirah는 어떤 메타 프로그래밍 기능을 제공합니까?
미라가 컴파일시 메타 프로그래밍 및 매크로에 대한 다양한 메커니즘을 지원했다. Mirah에서는 역동적 인 언어에 대한 "오픈 클래스"느낌이 상당합니다.
하지만 구체적인 내용을 찾을 수 없습니다. 더 자세한 정보가있는 사람이 있습니까?
Mirah는 컴파일 타임 매크로를 지원합니다. 이들을 사용하여 컴파일 할 때 실행되는 함수를 정의하여 구문 트리를 수정할 수 있습니다. 이를 통해 Java에서 볼 수있는 일반적인 패턴 중 일부를 Ruby와 비슷한 패턴으로 단순화 할 수 있습니다.
예를 들어, times
은 매크로로 구현됩니다. 현재 Mirah가 아니라 Ruby로 작성되었습니다.
당신은 숫자 0-4
를 인쇄이
5.times do |i|
puts i
end
처럼 사용할 수있는 자바에 당신은 물론 당신의 자신을 정의 할 수 있습니다
for(int i=0;i < 5; i++) {
System.out.println(i);
}
과 같을 것 매크로를 macro def
매크로를 사용하여. 예를 들어, 디버그 문자열을 생성하기 전에 디버그가 사용 가능한지 확인하는 공통 logger4j 패턴을 사용하려고한다고 가정합니다. 매크로로,이 같은 검사 암시하고 뭔가 만들 수 :
macro def debug debug_input
quote do
if logger.debugEnabled
logger.debug `debug_input`
end
end
end
내가 좋아 부를 수있는이
debug "something low level is going on: " + gimme_all_the_bytes_as_a_string
제가 구문 트리의 조각을 만드는거야 거기에 무슨 quote do ... end
그리고 "something low level is going on: " + gimme_all_the_bytes_as_a_string
표현식을``Mirah 매크로 따옴표 블록에있는``를 사용하여 그 안에 넣으면 그 안에있는 구문 트리 노드를 따옴표로 묶지 마십시오.
현재 Mirah의 작동 방식에 대한 리소스가 너무 많지는 않지만 Github의 example code을 살펴볼 수 있습니다. 궁금한 점이 있으시면 mailing list으로 전자 메일을 보내주십시오.
위대한 답변, 감사합니다! 원숭이 패치에 대한이 미라의 접근 방식이 맞습니까? –
실제로 확장 메서드를 추가하는 방법이 있습니다.'times'이 좋은 예입니다. 그러나 메서드를 재정의하는 방법은 제가 아는 한 존재하지 않습니다. 그것은 항상 그럴 것입니다. – BaroqueBobcat