Ruby 属性访问器赢得';在procs中使用时不起作用
我写了下面的代码片段来下载一些我需要的文件Ruby 属性访问器赢得';在procs中使用时不起作用,ruby,attr-accessor,Ruby,Attr Accessor,我写了下面的代码片段来下载一些我需要的文件 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_le
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
需要“打开uri”
兆字节=1024.0*1024.0
def字节到兆字节(字节)
字节/兆字节
结束
类下载器
阶级
即使已在content\u length\u proc
不,还没定。在此处设置局部变量size
,而不是访问器。新手犯的错误。更改为:
self.size = bytes_to_megabytes(t).round
即使已在content\u length\u proc
不,还没定。在此处设置局部变量size
,而不是访问器。新手犯的错误。更改为:
self.size = bytes_to_megabytes(t).round
顺便说一下,这个(“失踪<代码>自我/代码>”)可能是我认为可以帮助的第一个RuBOCOP建议(如果RuBOCCOP不愿意提出建议)。耸耸肩:你一定是在开玩笑。是否为隐藏实例变量的局部变量赋值?几乎不可能被发现,是的:)@mudasobwa:你在开玩笑,但事实确实如此。不实际运行代码就不可能[以任何形式确定]。“以任何形式确定”-除了0
、1
和∞代码>;)对于动态赋值,不一定是肯定的,它来自于<代码> StistAsEngEng/<代码>等。它应该是一样容易的:<代码>警告,如果SeopeEa包含StaseSythApple and LoalAlxValabeLySoxsS< 。(如果rubocop不厌其烦地建议。)@mudasobwa:它怎么知道?:耸耸肩:你一定是在开玩笑。分配给一个隐藏实例变量的局部变量?几乎不可能发现,是的:)@mudasobwa:你在开玩笑,但事实确实如此。不实际运行代码就不可能[以任何形式确定]。“以任何形式确定”-除了0
、1
和∞代码>;)它不应该确定动态分配,来自实例评估
等。它应该简单到:如果范围包含实例变量和局部变量,则发出警告
。