Ruby에서 가능하면 확실하지 않지만 누군가가 좋은 해결책을 알고있는 경우에 대비할 수 있습니다.Ruby proc/block의 구조 변경
블록의 구조를 변경하고 특정 노드를 다른 코드 구조로 바꾸고 싶습니다. 매크로와 비슷합니다. 예를 들어
, 나는some_method do
foo
bar
end
가 그럼 난 some_method에서
def some_method(&block)
...
end
처럼 some_method 정의
평가되지 않은 코드 블록을 가지고 있다고, 정말 뭔가 다른 블록에 "바"를 교체하고 싶습니다 , 예. 바즈와.블록을 평가하는 교체가 필요합니다. 궁극적으로 블록을 다른 곳으로 돌리고 있기 때문입니다.
Doable? 또는 아니오?
상당히 복잡한 답변을 생각할 수 있습니다. 예 : 블록을 대체 할 클로저를 추가하여 블록을 전달할 수 있으며 bar가 평가 될 때 method_missing과 bar를 바스로 바꿀 수 있습니다. 그러나 더 간단한 방법이 있습니까?
감사합니다.
당신이 원하는 것을하기 위해'bar'를 단순히 원숭이 패치하는 대신에 이것을하기에 정말로 좋은 이유가 있기를 바랍니다. 이러한 종류의 무거운 메타 프로그래밍은 외부 개발자의 관점에서 예측할 수 없을 정도로 행동하는 응용 프로그램으로 이어질 수 있습니다. – tadman
@ tadman : 원숭이 패치는 외부 개발자에게 친숙한가요? 나는 그것이 규범의 바깥에 있다는 것을 알았지 만, 일단 블록이 변경되면 다른 루비 코드 블록과 다르지 않으므로 실제로는 매우 잘 추상화되어 있습니다. 매크로는 유용한 개념입니다. – Overclocked
[매크로, 위생 및 Ruby에서 이름 별 호출] (http://weblog.raganwald.com/2008/06/macros-hygiene-and-call-by-name-in-ruby.html) 및 Reg의 [rewrite] (http://rewrite.rubyforge.org/)와 [ick] (http://ick.rubyforge.org/)의 보석을 보았습니까? 1.8st 해석기에 묶여있는 sexp/parse-tree에 의존하기 때문에 1.9에서 작동한다고 생각하지 않습니다. 그러나 루비를 좀 더 유능한 리스프와보다 유용한 함수형 언어로 구부리기위한 꽤 흥미로운 작업. – dbenhur