在Ruby中使用方法的问题

时间:2010-05-03 23:17:47

标签: ruby oop extension-methods

我是Ruby(也是OOP)的新手,我不知道为什么以下的东西在Ruby中不起作用

我使用新方法扩展了String类。很容易。现在我想扩展Fixnum类。 String对象出现在类的某个位置,但我不能使用我之前定义的方法。为什么?这是正常的吗?

这是String的新方法:

class String

 public 
   def convert
 case self
   when "0" 
    "zero"
       when "1"
            "one"
         .
         .
         .
     end
   end
  end

我想在为Fixnum定义一个新方法时使用它。

1 个答案:

答案 0 :(得分:1)

不明白你的问题。但是从上面的片段中我认为你走的是一个不需要复杂的方向,至少对于案例陈述: - )

想象一下,你有字符串“1”

首先,要将“1”转换为1,您需要使用to_i方法。你总是有to_s转换为String。如果没有,你仍然使用普通对象的to_s方法结束,这更像是一个调试值,但仍然是。

然后,你有数组,所以你可以利用索引。

words = ["zero", "one", "two", ... ]

所以单词[0]为“零”。哦,他们总是匹配。输入为“0”,但input.to_i为0.你得到了它。

def convert
 ["zero", "one", "two", ...][self.to_i]
end

就是这样。

现在,您可以拥有单位,青少年,数十等数组,并执行组装更复杂单词所需的操作。 The Linguistics gem正是这样做的,允许做类似的事情:

2004.en.numwords
# => "two thousand and four"

"cow".en.quantify( 20_432_123_000_000 )
# => "tens of trillions of cows"

我希望这很有用; - )