В Matlab я вспоминаю возможность объявить массив и инициализировать его, и он находится в памяти во время всего сеанса Matlab. Я мог бы скопировать его, изменить его и запустить через тесты. Этот вариант доступен в Ruby? В основном я хочу создать и заполнить массив из 12 миллионов 32-битных целых чисел. Затем я хочу запустить код, который обращается к этой памяти. Я не хочу повторно инициализировать этот массив каждый раз, когда я настраиваю/отлаживаю свой код ruby.Доступна переменная постоянство в Ruby?
ответ
Глобальная переменная - это один из способов, но немного громоздкий, я бы сказал.
Это означает, что вы хотите сохранить объекты, поскольку хотите, чтобы они были доступны через модификации вашего кода. Затем вам нужно инициализировать свои данные и сохранить их в файле. У вас есть несколько возможностей, что-то вроде YAML/JSON или, в двоичном, но более эффективном способе, Marshalling.
Если у вас есть структура данных, вы можете сохранить его в YAML с этим
require "yaml"
foo = SomeObject.new
File.open("bar.yaml", "w") do |fh|
YAML.dump(foo, fh)
end
JSON в значительной степени то же самое. Использование Marshal.dump эквивалентно.
Тогда у вас может быть метод в коде, который читается в данных.
File.open(fname) do |fh|
foo = YAML.load(fh)
end
Если вы используете интерактивную консоль ruby (irb), тогда вы можете объявить глобальную переменную, которая содержит ваши данные.
$ my_data = [1,2,3,4,5,6 ..... 12000000]
затем в текстовом редакторе выбора работы на вашем коде и требуют его в IRB сессии. Это позволит вам работать так, как вы хотите.
Я полагаю, что с сеансом, вы имеете в виду открытый 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 'loadable'
=> false
> some_number(data)
=> 101
С требованием вы получите старый (неправильный) результат.
> load 'loadable.rb'
=> true
> some_number(data)
=> 11
С грузом вы получаете желаемые результаты. Обратите внимание, что вам нужно вызвать нагрузку с полным именем файла, включая «.rb».
Вы можете сделать это даже без irb, имея одну рубиновую программу, которая инициализирует данные, а затем ждет изменений в других файлах в цикле, загружает их снова и вызывает их функции.
Просто создайте массив и обратитесь к нему. Просто как тот. Как и где вы должны создать этот массив, зависит от вашего кода. Я бы сказал, что константа имеет наибольший смысл, потому что массив является постоянным, а не переменным.
THE_ARRAY = []
Добавьте номера в THE_ARRAY
, а затем использовать его. THE_ARRAY
- это указатель, поэтому, когда вы его вызываете, Ruby будет получать один и тот же массив из одного и того же места памяти каждый раз.
- 1. переменная viewstate всегда доступна?
- 2. Локальная переменная не доступна
- 3. переменная не доступна в angular.forEach
- 4. Переменная, определенная индексом, не доступна
- 5. Как эта доступная переменная доступна?
- 6. Переменная доступна только после эха
- 7. Переменная доступна для нескольких проектов
- 8. Mutable переменная доступна от закрытия
- 9. Глобальная переменная в app.js доступна в маршрутах?
- 10. как эта переменная не доступна в C?
- 11. Проверьте, доступна ли переменная класса в JavaScript
- 12. Почему переменная const доступна в статическом методе?
- 13. Глобальная переменная жидкости доступна в пользовательских фильтрах
- 14. переменная доступна в пределах внутреннего класса
- 15. Доступна статическая переменная суперкласса в подклассе
- 16. PHP "глобальной" переменная не доступна в __construct
- 17. Переменная экземпляра Ruby и локальная переменная
- 18. Переменная Scope в методе и его постоянство в C++
- 19. Неопределенная переменная в Ruby
- 20. Переменная в Ruby Regex
- 21. Доступна ли эта переменная с помощью синхронизации?
- 22. Переменная переменная доступна из закрытия с обещанием и контуром
- 23. Как доступна переменная Rails.cache для потоков?
- 24. Rails 3 - переменная доступна во всех контроллерах
- 25. Переменная экземпляра не доступна после рендера
- 26. Локальная переменная не доступна из другого метода
- 27. вне переменная не доступна внутри усовершенствован для
- 28. Переменная доступна для всех экземпляров класса
- 29. Почему переменная доступна вне ее кода?
- 30. Переменная доступна без java-программы (singleton)