2014-11-02 3 views
-1

Ruby 코드를 실행하기위한 여러 가지 Ruby C API 함수가 있습니다. 대부분은 require처럼 격리 된 바인딩에서 코드를 실행합니다. 그러나 그들 중 일부는 먼저 을 실행하기 전에 코드를 익명 모듈에 래핑합니다. 예를 들어, rb_load은이 래핑을 원할지 여부에 대한 인수를 취합니다. rb_eval_string_wrap은 단지 rb_eval_string_protect이지만 줄 바꿈을 사용합니다. C에서익명 모듈을 사용하여 Ruby 배치하기

는, 포장은 다음과 같습니다

/* load in anonymous module as toplevel */ 
th->top_self = rb_obj_clone(rb_vm_top_self()); 
th->top_wrapper = rb_module_new(); 
rb_extend_object(th->top_self, th->top_wrapper); 

이 일의 요점은 무엇입니까? 필자는 이러한 함수를 unwrapped equivalents와 함께 테스트했으며 결과는 항상 동일합니다. 내가 사용하고 있지 않은 유스 케이스가 있습니까?

+0

안녕하세요, 1 년 동안 무작위 downvote 주셔서 감사합니다. – Max

답변

0

더 많은 테스트를 거쳐야합니다. 이것이 bug 인 것 같습니다.

익명 모듈에서 코드를 래핑하는 것은 코드에 정의 된 상수/메서드로 최상위 네임 스페이스를 오염시키지 않는 것입니다. rb_load이 포장을 제대로 수행합니까, rb_eval_string_wrap 않습니다.