当在procs中使用时,attr_accessor将不起作用

时间:2018-04-26 14:05:52

标签: ruby attr-accessor

我编写了以下代码片段来下载我需要的一些文件。

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 中设置了总尺寸,也不会在最后一行打印。

为什么会这样?

1 个答案:

答案 0 :(得分:3)

  

即使它已在content_length_proc

中设置

不,它还没有设定。您在那里设置了一个局部变量size,而不是访问者。菜鸟错了。改为:

self.size = bytes_to_megabytes(t).round