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,
:password => @db_pass, :database => @db_name)
@cdr_result = client.query("SELECT * from your_db_table_name')
解决方案
在 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
推荐阅读
- python - 错误的 scipy 拟合,即使初始猜测良好
- python - 将 os 模块添加到 PyCharm
- powerbi - 仅显示日期切片器 Power Bi 的第一个日期和最后一个日期的测量值
- javascript - 无法从 RESTFUL API 获得 Node 的正文响应
- enums - ldap 从模式中获取定义的枚举及其值
- prometheus - prometheus 规则因“不允许多对多匹配”而失败
- google-maps - 巴士站时刻表
- python - 选择具有 SQLAlchemy 继承的特定列
- android - Android总是在后台停止音频流
- angular - 如何将 primeNg 下拉选择值设置为对象的 id 而不是整个对象