我是Ruby(也是OOP)的新手,我不知道为什么以下的东西在Ruby中不起作用
我使用新方法扩展了String类。很容易。现在我想扩展Fixnum类。 String对象出现在类的某个位置,但我不能使用我之前定义的方法。为什么?这是正常的吗?
这是String的新方法:
class String
public
def convert
case self
when "0"
"zero"
when "1"
"one"
.
.
.
end
end
end
我想在为Fixnum定义一个新方法时使用它。
答案 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"
我希望这很有用; - )