Я вызываю Ruby-функции из моего кода на C++ через команды вложения (rb_eval и т. П.). Есть ли способ остановить выполнение кода частично, сохранить локальные переменные и перезапустить его с того же места позже?Остановить и продолжить embobbed ruby code
1
A
ответ
1
Если вы хотите сохранить переменные Ruby для использования позже, вы хотите использовать функцию с именем Marshaling. Создайте класс, в котором вы можете сохранить все переменные, которые хотите сохранить, и используйте Marshal::dump
, чтобы сохранить класс в файл. Данные могут быть восстановлены в переменную Ruby позже, используя Marshal::load
.
Перезапуск кода из определенной точки может быть не таким простым. Вы можете маршалировать классы и данные, но не обязательно состояние всего интерпретатора Ruby. Одна из возможностей заключается в том, чтобы хранить достаточную информацию о состоянии в ваших данных с маршалированием, чтобы вы могли повторно загрузить данные и выяснить, где вам нужно забрать.