ruby - 如何从另一个文件中的外部类访问变量
问题描述
我的文件结构如下:
Main/
Games/
roulette.rb
casino.rb
wallet.rb
player.rb
我有一个像这样在类中持有货币价值的钱包类。
class Wallet
attr_accessor :money
def initialize
@money = 0
end
end
然后我有一个继承自 Wallet 类的播放器类
class Player < Wallet
attr_accessor :name
def initialize
super()
@name = nil
get_user_info
end
然后我有一个像这样从 Player 继承的 Casino 类
class Casino < Player
def initialize
binding.pry
puts @money, @name
end
我也习惯于require_relative
拉入这两个文件,认为这可以让我访问它们的全局变量@money, @name
。
如果我在roulette.rb
文件中,这里是我写的代码,只是为了看看它是否有值。
require_relative '../wallet.rb'
class Roulette
def initialize
puts @wallet
end
end
我将如何在赌场类中访问这些变量?谢谢您的帮助。
解决方案
这些不是全局变量。它们被称为“实例变量”,要访问它们,您需要创建您的赌场和玩家的实例。看起来像这样。
player = Player.new
player.money # => 0
player.money += 10
player.money # => 10
在您的 Casino 类中,您不会调用父初始化程序(我认为这是一个简单的疏忽),因此它不会初始化@name
and @money
。
轮盘赌根本不做任何事情来获得钱包。所以它保持在默认值 nil。
推荐阅读
- python - Django:在以后的查询中使用查询结果而不是重复它
- amazon-cloudformation - Cloudformation 根堆栈资源未使用 serverless-plugin-split-stacks 正确拆分
- c# - 如何在进程结束之前读取 C# 进程的输出?
- javascript - 更改时显示/隐藏 div 并清除字段值
- python - 使用 Selenium python 从隐藏表中获取数据
- css - 如何将 Vue VNode 渲染为字符串
- reactjs - 未在 npm 反应商店中加载 magento2 连接器的产品和子类别
- python - Python 弃用警告
- google-cloud-platform - 无法使用 terraform 停止 GCP 虚拟机
- azure-devops - Azure Pipeline 中的自定义集成测试