我不完全确定如何谷歌这个问题,所以我来这里举个例子。我正在查看一个有以下摘录的selenium脚本:
def setup
@starting_url = "https://www.example.com"
@restricted_url = "https://www.example.com/restricted"
@user_email = "foo@bar.com"
@user_password = "notarealpassword"
@headless_mode = false
@page_timeout = 15 # seconds
@log_file = 'log/development.log'
@lineup_file = 'data/lineup1.csv'
... more code
end
我的问题是,为什么这里的每个变量都以@
符号为前缀?此方法不是类的一部分。它正在全球范围内编写。我理解变量在显式类的情况下具有@
符号的意义,但是这里呢?
答案 0 :(得分:4)
这些变量成为main
对象范围内的实例变量。它们将在全球范围内定义的其他方法中可用。一旦方法返回,在全局范围内的方法中定义的局部变量就会超出范围。
插图:
def foo
lvar = 1
@ivar = 2
end
def bar
puts @ivar # will print 2 after foo() is called
puts lvar # will throw NameError
end
@ivar # => nil
foo # initializes @ivar
@ivar # => 2
bar # prints 2, throws NameError
lvar # throws NameError