В следующем коде почему переменная data
правильно работает как переменная класса, но не как переменная экземпляра?(Примечание: я попытался упростить / воспроизвести только необходимые фрагменты сценария, чтобы вопрос имел смысл. Если потребуется больше, я могу опубликовать полный сценарий.)
require 'prawn'
class Test
include Prawn
def initialize (data, filename) #data is an array of arrays
@@data = data #this is the variable in question, when @data the script fails
@filename = filename
end
def to_pdf
Document.generate("#{@filename}.pdf") do #included from Prawn
@@data.each do |item|
do some stuff to the data
end
make_table with the data that's been worked on
end
end
end
test_run = Test.new([[1, 2, 1], [1, 2, 2]], "testfile.pdf")
test.to_pdf
Если вместо него @@data
@data
скрипт возвращает undefined method 'each' for nil:NilClass (NoMethodError)
Почему это так?Разве переменная экземпляра не должна быть одинаково доступна для включенного модуля?(также почему нормально, что переменная @filename является методом экземпляра?)