저는 오랫동안 파이썬을 사용 해왔고 방금 Ruby를 둘러 보았습니다.하지만 두 모듈의 차이점을 발견했습니다. 특히 C-API를 통해 볼 때 언어가 혼란 스럽습니다. 내가 오기 때문에파이썬 모듈 의미론과 C-API의 루비 모듈 의미론
require "pymodule"
PyModule.Py_Initialize()
PyModule.PyRun_SimpleString("print 'hellooo'")
내가 파이썬의 모듈이 어떻게 작동하는지와 비슷한 일을 예상처럼 그를 호출 할 때 예를 들어, 여기에 작은 루비 C 모듈
#include "Python.h"
#include "ruby.h"
VALUE PyModule = Qnil;
void Init_pymodule();
VALUE method_Py_Initialize();
VALUE method_PyRun_SimpleString();
void Init_pymodule() {
PyModule = rb_define_module("PyModule");
rb_define_method(PyModule, "Py_Initialize", method_Py_Initialize, 0);
rb_define_method(PyModule, "PyRun_SimpleString", method_PyRun_SimpleString, 1);
}
VALUE method_Py_Initialize(VALUE self) {
Py_Initialize();
return Qnil;
}
VALUE method_PyRun_SimpleString(VALUE self, VALUE command) {
return INT2NUM(PyRun_SimpleString(RSTRING(command)->as.ary));
}
입니다. 그러나 나는 PyModule
을 사용하여 클래스를 확장해야하거나 include "PyModule"
을 사용해야한다는 것을 알고 있습니다. 나는 PyModule
이 파이썬의 의미와 비슷한 모듈 객체에이 함수들을 첨부 할 수있는 방법을 찾고있다. Ruby에서 실제로 이런 일이 발생하는지 궁금합니다.
네, 그게 정확히 문제입니다. Ruby는 클래스 자체를 확장 할 수 있다는 점에서 흥미로운 메타 클래스 모델을 가지고 있습니다. – dcolish