我编写了以下代码片段来下载我需要的一些文件。
DT[, ColA := if (uniqueN(ColB)==1 && uniqueN(ColA)==2) "Yes", by=id][]
# > DT[, ColA := if (uniqueN(ColB)==1 && uniqueN(ColA)==2) "Yes", by=id][]
# id ColA ColB
# 1: 1 Yes Red
# 2: 1 Yes Red
# 3: 2 No Blue
# 4: 3 No Blue
# 5: 3 No Blue
# 6: 4 Yes Red
# 7: 4 Yes Red
问题是即使已经在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
中设置了总尺寸,也不会在最后一行打印。
为什么会这样?
答案 0 :(得分:3)
即使它已在
中设置content_length_proc
不,它还没有设定。您在那里设置了一个局部变量size
,而不是访问者。菜鸟错了。改为:
self.size = bytes_to_megabytes(t).round