Вызов метода на объекте

Единственным путем я мог думать, кроме того, для ScriptEngineManager устаревшего, Rhino . Носорог является механизмом JavaScript, записанным в чистом Java, поэтому просто загрузите его или вставка копии от эта ссылка GitHub . Это - очень сложный путь, но вход кода JavaScript неограничен, в отличие от ScriptEngineManager, который не позволяет классы JavaScript и этажерку.

7
задан starblue 17 April 2010 в 13:38
поделиться

2 ответа

PyObject* obj = ....
PyObject *ret = PyObject_CallMethod(obj, "foo", "(s)", "An arg");
if (!ret) {
   // check error...
}

Прочтите ] Документация по Python C API . В этом случае вам нужен протокол объекта .

 PyObject * PyObject_CallMethod (PyObject * o, метод char *, формат char *, ...)

Возвращаемое значение: Новая ссылка.

Вызвать метод с именем method объекта o с переменным номером C аргументы. Аргументы C следующие: описывается форматом Py_BuildValue () строка, которая должна создать кортеж. Формат может быть NULL , что означает что никаких аргументов не приводится. Возвращает результат вызова на успех или NULL в случае неудачи. Это эквивалент Python выражение o.method (args) . Обратите внимание, что если вы передаете только PyObject * args , PyObject_CallMethodObjArgs () - это более быстрая альтернатива.

И

 PyObject * PyObject_CallMethodObjArgs (PyObject * o, PyObject * name, ..., NULL)

Возвращаемое значение: Новая ссылка.

Вызывает метод объекта o , где дается имя метода. как строковый объект Python по имени. Это вызывается с переменным числом PyObject * аргументы. Аргументы предоставляется как переменное количество параметры, за которыми следует NULL . Возврат результат вызова в случае успеха, или NULL при сбое.

7
ответ дан 7 December 2019 в 01:24
поделиться

Ваш пример:

PyObject* ret = PyObject_CallMethod(obj, "foo", "(s)", "An arg");
3
ответ дан 7 December 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: