私は長い間Pythonを使用してきましたが、Rubyを使い始めたばかりですが、2つのモジュールの違いを見ています特にC-APIを通して見たときには、本当に混乱します。私はインポートし、そうPythonモジュールのセマンティクスとC-APIのRubyモジュールのセマンティクス
require "pymodule"
PyModule.Py_Initialize()
PyModule.PyRun_SimpleString("print 'hellooo'")
私はPythonのモジュールがどのように動作するかに似て動作するように期待されるようにそれを呼び出す場合たとえば、ここに小さなルビー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
にPythonのセマンティクスに似たモジュールオブジェクトにこれらの関数を付ける方法を探しています。また、実際にRubyで何が起きているのかが不思議です。
はい、それはまさに問題です。 Rubyは、自分自身でクラスを拡張できるという点で、面白いメタクラスモデルを持っています。 – dcolish