ruby - 为什么我得到一个零值(Ruby)
问题描述
我有 2 个班级,在初始化“商店”班级时,我给班级提供了一种货币。如何让我的二等舱的“@checkout_currency”采用一等舱的“@currency”值?@checkout_currency 当前等于 nil,我希望它等于 "USD"
这是我的课。
第一的..
require_relative 'convert'
class Shop
DEFAULT_CURRENCY = "USD"
def initialize(currency = DEFAULT_CURRENCY,
convert = Convert.new)
@currency = currency
@convert = convert
end
def self.currency
@currency
end
end
第二..
require_relative 'shop'
class Convert
attr_reader :checkout_currency
def initialize(checkout_currency = Shop.currency)
@checkout_currency = checkout_currency
end
end
解决方案
是的,定义一个方法self
将使它成为类上的方法,而不是类的任何实例上的方法。But@currency
是一个实例变量——它对于 的每个实例都是不同的Shop
,而不是为Shop
类本身定义的。如果你有 3 个Shop
不同货币的对象怎么办?
真正错误的是你的对象组合——是构造的Convert
东西Shop
,还是必须完全形成的东西?如果你重组到其中任何一个,你的问题就会消失。
class Shop
def initialize(convert, currency=DEFAULT_CURRENCY)
@convert = convert
@currency = currency
end
end
convert = Convert.new(Shop.DEFAULT_CURRENCY)
shop = Shop.new(convert)
或者可能:
class Shop
def initialize(currency=DEFAULT_CURRENCY, convert_class=Convert)
@convert = convert_class.new(currency)
@currency = currency
end
end
shop = Shop.new
推荐阅读
- selenium - selenium webdriver 使用 firefox 进行谷歌搜索/硒测试
- django - 如何在主机上设置 Django + React?
- nodes - 设置tendermint时没有要拨打的地址或连接的对等点(仅单个节点)
- kotlin - 建模外部 JS 对象
- python - 更改熊猫数据框中预选元素中的列
- mongodb - mongoose concat和数组中的单个元素
- ios - 在 iOS 上原生找不到 RNFirebase 核心模块
- javascript - 如何调整页脚位置html css
- haskell - 使用“BOOM!”时出现词汇错误
- ios - 绘制自定义形状 Swift