Остановка и продолжение втирания рубинового кода - PullRequest
1 голос
/ 12 февраля 2010

Я вызываю функции Ruby из моего кода C ++ с помощью команд встраивания (rb_eval и т. П.). Есть ли способ остановить выполнение кода на полпути, сохранить локальные переменные и позже перезапустить его с того же места?

1 Ответ

1 голос
/ 12 февраля 2010

Если вы хотите сохранить переменные Ruby для последующего использования, вы хотите использовать функцию под названием Marshaling . Создайте класс, в котором вы можете хранить все переменные, которые вы хотите сохранить, и используйте Marshal::dump для сохранения класса в файл. Данные могут быть позже восстановлены в переменную Ruby с помощью Marshal::load.

Перезапуск кода с определенной точки может быть не таким простым. Вы можете маршалировать классы и данные, но необязательно состояние всего интерпретатора Ruby. Одна из возможностей - хранить достаточно информации о состоянии в ваших маршалированных данных, чтобы вы могли заново загрузить данные и выяснить, где вам нужно их собрать.

...