Ruby脚本中var name之前的@符号

时间:2015-10-28 19:25:03

标签: ruby

我不完全确定如何谷歌这个问题,所以我来这里举个例子。我正在查看一个有以下摘录的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

我的问题是,为什么这里的每个变量都以@符号为前缀?此方法不是类的一部分。它正在全球范围内编写。我理解变量在显式类的情况下具有@符号的意义,但是这里呢?

1 个答案:

答案 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