attr_accessor не будет работать при использовании в процессах - PullRequest
0 голосов
/ 26 апреля 2018

Я написал следующий фрагмент, чтобы загрузить некоторые файлы, которые мне нужны.

require 'open-uri'

MEGABYTE = 1024.0 * 1024.0

def bytes_to_megabytes(bytes)
  bytes / MEGABYTE
end

class Downloader
  class << self
    attr_accessor :size

    def get(resource)
      open(resource,
         content_length_proc: proc do |t|
           size = bytes_to_megabytes(t).round
           puts "Total size is: #{size}"
         end,
         progress_proc: proc do |step| 
           # size won't print here!
           puts "Downloading #{bytes_to_megabytes(step).round} out of #{size}"
         end ) 
    end
  end
end

Проблема в том, что общий размер не будет напечатан в последней строке, даже если он уже был установлен в content_length_proc.

Почему это происходит?

1 Ответ

0 голосов
/ 26 апреля 2018

, хотя оно уже установлено в content_length_proc

Нет, он не был установлен. Вы устанавливаете локальную переменную size, а не метод доступа. Ошибка новичка. Изменить на это:

self.size = bytes_to_megabytes(t).round
...