我有一种情况,我在脚本顶部定义了一个变量,并希望在方法中引用它:
#############
# Variables #
#############
tmp_dir = '/path/to/tmp/dir'
###########
# Methods #
###########
def cache(page)
begin
%x[wget -q -O #{tmp_dir}/page #{page}]
rescue => msg
puts "error: #{msg}"
exit
end
end
cache("http://somepage.com")
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
undefined local variable or method `tmp_dir' for main:Object
Run Code Online (Sandbox Code Playgroud)
我猜我需要创建tmp_dir
一个全局变量?我讨厌使用全局变量。有没有 Ruby-ish 的方法来做到这一点?
tmp_dir
在类定义中被定义为变量,但在实例函数中,您正在寻找在类tmp_dir
的实例上定义的变量。这就是为什么tmp_dir
在函数内部未定义。
您可以将其设为全局或将其设为类变量作为快速修复。我认为有一个更好的选择:将它包装在它自己的知道如何缓存的类中,然后在tmp_dir
不使其成为全局或类变量的情况下进行初始化:
class Cacher
def initialize(tmp_dir)
@tmp_dir = tmp_dir
end
def cache(page)
wget "#{@tmp_dir}/page"
end
end
# in your main file:
cacher = Cacher.new('/path/to/tmp/dir') # here's your configuration line, but with no global!
# later
cacher.cache("index.html")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2572 次 |
最近记录: |