有人能解释一下这个ruby代码段中实例变量@prefix的用法吗?

有人能解释一下这个ruby代码段中实例变量@prefix的用法吗?,ruby,Ruby,我试图更好地理解标准类声明之外的实例变量用法。这可能是一个奇怪的例子,但这是因为@符号是在类声明之外使用的,我还没有看到这一点 require "mysql" @db_host = "localhost" @db_user = "root" @db_pass = "root" @db_name = "your_db_name" client = Mysql::Client.new(:host => @db_host, :username => @db_user, :pas

我试图更好地理解标准类声明之外的实例变量用法。这可能是一个奇怪的例子,但这是因为
@
符号是在类声明之外使用的,我还没有看到这一点

require "mysql"

@db_host  = "localhost"
@db_user  = "root"
@db_pass  = "root"
@db_name = "your_db_name"

client = Mysql::Client.new(:host => @db_host, :username => @db_user, 
:password => @db_pass, :database => @db_name)
@cdr_result = client.query("SELECT * from your_db_table_name')

在ruby中,一切都是对象。例如,在代码中,您实际上位于主对象中

在您的文件中,如果执行放置self.class,您将看到您位于main对象下,并且该类是对象

在实践中,使用@或不使用@都没有区别。如果您声明一个class@myvar,您将作为实例变量在整个主对象中。您的变量将在该文件的任何方法中可见

def set_country
  @myvar = 'Brazil'
end

def get_country
  puts @myvar
  # @myvar is visible here
end

------------------

def set_country
  myvar = 'Brazil'
end

def get_country
  puts myvar
  # cannot access 'Brazil' value
end

Ruby程序的初始执行上下文是对象,即对象类的实例。如果您试图用inspect或p查询对象,它将只返回前面提到的“main”

设置@blah等值将在此顶级对象上创建实例变量

下面的简短片段应该可以说明这一点

检查上下文只会返回
main
,它是
对象
,更具体地说是
对象
类的实例

实例变量的初始列表是一个空数组,但是在您使用@blah设置了some之后,您可以看到它们已添加到实例变量列表中

在您发布的示例中,实际上不需要使用实例变量,局部变量就可以了

p self
puts self.class
puts instance_of? Object
puts "instance variables = #{self.instance_variables}"
@db_host  = "localhost"
@db_user  = "root"
@db_pass  = "root"
@db_name = "your_db_name"
puts "instance variables = #{self.instance_variables}"

此外,还有关于
main
对象的更多信息。在Ruby中,人们常说一切都是对象。这是我第一次看到有人声称“一切都是一个类”。除了前提不正确外,我看不到“一切都是一个类”和“你是……在主要对象中”之间有任何逻辑联系,你用“所以”这个词把它们联系起来。@sawa:看看这个具体的例子,我确实会说,是否使用实例变量没有任何区别。你能解释一下为什么你认为这个说法是错误的吗?而我理解这个答案的前提;我也了解ruby。我不确定你的回答是否真的能向不知道的人解释任何事情。我强烈建议你的答案要更详细一点,也要更合理一点。
main 
Object
true
instance variables = []
instance variables = [:@db_host, :@db_user, :@db_pass, :@db_name]