首页 > 解决方案 > 有人可以解释这个 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, 
:password => @db_pass, :database => @db_name)
@cdr_result = client.query("SELECT * from your_db_table_name')

标签: ruby

解决方案


在 ruby​​ 中,一切都是对象。例如,在您的代码中,您实际上是在对象中。

在你的文件中,如果你确实puts self.class,你会看到你在对象下,并且类是Object

在实际情况下,使用 @ 或不使用没有区别。如果您声明一个类 @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

推荐阅读