gpt4 book ai didi

ruby - 任何人都可以解释这个三元和代码的 method_missing 部分吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:15 25 4
gpt4 key购买 nike

class Numeric
@@currencies = {'yen' => 0.013, 'euro' => 1.292, 'rupee' => 0.019, 'dollar' => 1.0}

def method_missing(method, *args)
singular_currency = (method == :in ? args.first : method).to_s.gsub(/s$/, '')
if @@currencies.has_key?(singular_currency)
self.send(method == :in ? :/ : :*, @@currencies[singular_currency])
else
super
end
end
end

我没有得到准确的代码,我知道,它用于转换,但我没有得到三元运算符部分。

最佳答案

这些行:

singular_currency = (method == :in ? args.first : method).to_s.gsub(/s$/, '')
self.send(method == :in ? :/ : :*, @@currencies[singular_currency])

...也可以写成:

if method == :in
singular_currency = args.first.to_s.gsub(/s$/, '')
self / @@currencies[singular_currency]
else
singular_currency = method.to_s.gsub(/s$/, '')
self * @@currencies[singular_currency]
end

这样写更清楚,但增加了更多的重复。在 Ruby(以及整个 Smalltalk 系列)中,方法调用和消息发送是一回事。 send是一种调用在其参数中指定的方法的方法。

将此添加到 method_missing 可让您支持如下语法:

4.dollars
# => 4 * 1.0
4.dollars.in(:yen)
# => 4 * 1.0 / 0.013

4.yen
# => 4 * 0.013
4.yen.in(:dollars)
# => 4 * 0.013 / 1.0

关于ruby - 任何人都可以解释这个三元和代码的 method_missing 部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12848833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com