Вызов исходной функции после подстройки аргументов является неправильным использованием R-API?
Я пытаюсь создать небольшое расширение для R здесь для встраивания текущего времени в приглашение R: https://github.com/musically-ut/extPrompt
Вещи, кажется, работают в целом, но R CMD check .
поднял предупреждение:
Файл '[усеченный].. Rcheck / extPrompt / libs / extPrompt.so': Обнаружен не API-вызов R: 'ptr_R_ReadConsole'
Скомпилированный код не должен вызывать точки входа без API в R.
Соответствующий файл выглядит так: https://github.com/musically-ut/extPrompt/blob/master/src/extPrompt.c и находится в строке 38, я думаю.
void extPrompt() {
// Initialize the plugin by replacing the R_ReadConsole function
old_R_ReadConsole = ptr_R_ReadConsole;
ptr_R_ReadConsole = extPrompt_ReadConsole;
// ...
}
int extPrompt_ReadConsole(const char *old_prompt, unsigned char *buf, int len,
int addtohistory) {
// ...
// Call the old function with the `new_prompt`
return (*old_R_ReadConsole)(new_prompt, buf, len, addtohistory);
}
Я пытаюсь сделать R_ReadConsole
Вызов API. Тем не менее, поскольку другой плагин (например, мой) мог уже переопределить его, я не хочу напрямую вызывать R_ReadConsole
но функция, которая ранее была в ptr_R_ReadConsole
,
Это неправильное использование API?
1 ответ
Что касается некорректного использования API - да. Поскольку проверка CMD R говорит вам, что это проблема, это официально проблема. Это не имеет значения, если пакет работает для вас и всех его пользователей, и пакет не должен быть размещен на CRAN. Однако использование этого символа в вашем коде может работать не на всех платформах, и не гарантируется, что оно будет работать в будущем (но, вероятно, будет!).