money中的初始化方法gem
initialize method in the money gem
我正在阅读 money gem 源代码,但我似乎无法理解构造函数:
def initialize(obj, currency = Money.default_currency, bank = Money.default_bank)
@fractional = obj.respond_to?(:fractional) ? obj.fractional : as_d(obj)
@currency = obj.respond_to?(:currency) ? obj.currency : Currency.wrap(currency)
@currency ||= Money.default_currency
@bank = obj.respond_to?(:bank) ? obj.bank : bank
end
为什么我们要测试 obj
是否有 "fractional"
方法?什么时候 return 为真,什么时候 return 为假?下一行中关于货币的相同问题。
谢谢
这些检查是为了允许将各种事物作为 obj
传递并进行智能操作。这是一个使用 "duck typing" 的例子——我们不关心它到底是什么,但如果它像鸭子一样嘎嘎叫,就把它当作鸭子来嘎嘎叫。来源评论:
# @param [Object] obj Either the fractional value of the money,
# a Money object, or a currency. (If passed a currency as the first
# argument, a Money will be created in that currency with fractional value
# = 0.
# @param [Currency, String, Symbol] currency The currency format.
# @param [Money::Bank::*] bank The exchange bank to use.
#
# @example
# Money.new(100) #=> #<Money @fractional=100 @currency="USD">
# Money.new(100, "USD") #=> #<Money @fractional=100 @currency="USD">
# Money.new(100, "EUR") #=> #<Money @fractional=100 @currency="EUR">
您的意图似乎是您可能想要传递一个 Money 对象:如果是这样,您想要使用相同的 fractional
和 currency
。如果它没有这些方法,请将其视为数字。
我正在阅读 money gem 源代码,但我似乎无法理解构造函数:
def initialize(obj, currency = Money.default_currency, bank = Money.default_bank)
@fractional = obj.respond_to?(:fractional) ? obj.fractional : as_d(obj)
@currency = obj.respond_to?(:currency) ? obj.currency : Currency.wrap(currency)
@currency ||= Money.default_currency
@bank = obj.respond_to?(:bank) ? obj.bank : bank
end
为什么我们要测试 obj
是否有 "fractional"
方法?什么时候 return 为真,什么时候 return 为假?下一行中关于货币的相同问题。
谢谢
这些检查是为了允许将各种事物作为 obj
传递并进行智能操作。这是一个使用 "duck typing" 的例子——我们不关心它到底是什么,但如果它像鸭子一样嘎嘎叫,就把它当作鸭子来嘎嘎叫。来源评论:
# @param [Object] obj Either the fractional value of the money,
# a Money object, or a currency. (If passed a currency as the first
# argument, a Money will be created in that currency with fractional value
# = 0.
# @param [Currency, String, Symbol] currency The currency format.
# @param [Money::Bank::*] bank The exchange bank to use.
#
# @example
# Money.new(100) #=> #<Money @fractional=100 @currency="USD">
# Money.new(100, "USD") #=> #<Money @fractional=100 @currency="USD">
# Money.new(100, "EUR") #=> #<Money @fractional=100 @currency="EUR">
您的意图似乎是您可能想要传递一个 Money 对象:如果是这样,您想要使用相同的 fractional
和 currency
。如果它没有这些方法,请将其视为数字。