Я предполагаю, что под сессией вы подразумеваете открытый irb (интерактивный рубин), но это предложение не ограничивается этим.
Первое, что нужно сделать, это инициализировать ваши данные. Не имеет значения, сохраняете ли вы данные как глобальную переменную или как локальную переменную, которую вы передаете в качестве параметров, потому что ruby передает параметры как ссылки. Когда вы изменяете код, который работает с данными, вы должны использовать оператор «load» вместо «require», потому что load заставляет ruby снова анализировать файл.
Например, допустим, вы инициализировали свои данные в вашем irb
> data = (1..120).to_a
=> [1, 2, ...]
(Обратите внимание, что irb выводит массив в оболочку, поэтому при инициализации большого массива вы получаете множество чисел, бегущих по экрану.)
И ваш код, который использует эти данные в файле с именем loadable.rb
def some_number(data)
data[100]
end
Теперь вы можете загрузить этот файл в irb и вызвать функцию.
> require 'loadable'
=> true
> some_number(data)
=> 101
Когда вы измените код в loadable.rb на (скажем, верните запись 10 вместо 100, перезагрузите файл и снова вызовите функцию, вы получите разные результаты для require и load.
> require 'loadable'
=> false
> some_number(data)
=> 101
С помощью require вы получите старый (неправильный) результат.
> load 'loadable.rb'
=> true
> some_number(data)
=> 11
С нагрузкой вы получите желаемый результат. Обратите внимание, что вам нужно вызвать load с полным именем файла, включая «.rb».
Вы можете сделать это даже без irb, имея одну программу ruby, которая инициализирует данные, а затем ожидает изменений в других файлах в цикле, загружает их снова и вызывает их функции.