我正在使用Ruby on Rails并且很新,但我在其他语言中拥有广泛的编程背景。目前我现在有以下代码:
def self.AVERAGE_COMPUTATIONS
{
:a => ["(AVG(a) as a"],
:b => ["(AVG(b) as b"],
...
:z => ["(AVG(z) as z"],
}
我被告知这不是最好的方法,因为如果某些内容发生变化,特别是使用SQL,调试很麻烦,这是有道理的。我被告知更好的方法如下:
def self.AVERAGE_COMPUTATIONS
{
:a => [:avg],
:b => [:avg],
...
:z => [:avg],
}
这是有道理的,因为我基本上做同样的事情,所以把它全部放在一个函数中。但令我困惑的是,我正在使用符号作为函数。我不确定这是否可能。是吗?在做了一些研究后,我发现你可以使用.send(:avg)
但是如何传递参数?
我有点困惑,所以任何澄清都会非常感激。如果我使用[:avg]
会有帮助,有人可以告诉我函数标题会是什么样的。
答案 0 :(得分:1)
参数可以作为.send
的附加参数传递。致电.send(:avg, "a")
会调用#avg
方法,并将"a"
作为第一个参数传递。
我不清楚您尝试使用此方法实现的目标。如果每个值都相同,您可以完全免除Hash,无论密钥如何。您根本不需要使用.send
。
def self.AVERAGE_COMPUTATIONS(symbol)
"(AVG(#{symbol}) as #{symbol}"
end
其中symbol是您在代码中用于哈希查找的键。
看起来它应该实现你想要做的事情,而不需要哈希。