带符号的Ruby符号

时间:2014-07-10 21:53:52

标签: sql ruby-on-rails ruby

我正在使用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]会有帮助,有人可以告诉我函数标题会是什么样的。

1 个答案:

答案 0 :(得分:1)

参数可以作为.send的附加参数传递。致电.send(:avg, "a")会调用#avg方法,并将"a"作为第一个参数传递。

我不清楚您尝试使用此方法实现的目标。如果每个值都相同,您可以完全免除Hash,无论密钥如何。您根本不需要使用.send

def self.AVERAGE_COMPUTATIONS(symbol)
  "(AVG(#{symbol}) as #{symbol}"
end

其中symbol是您在代码中用于哈希查找的键。

看起来它应该实现你想要做的事情,而不需要哈希。