Проблема с использованием метода в Ruby - PullRequest
0 голосов
/ 04 мая 2010

Я очень плохо знаком с Ruby (и с ООП), и не знаю, почему в Ruby не работает следующее

Я расширил класс String новым методом.Достаточно просто.Теперь я хочу расширить класс Fixnum.Объект String появляется где-то в классе, но я не могу использовать метод, который я определил ранее.Зачем?Это нормально?

Это новый метод для String:

class String

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

И я хотел бы использовать его в одной точке при определении нового метода для Fixnum.

1 Ответ

1 голос
/ 04 мая 2010

Не понял вашего вопроса. Но из приведенного выше фрагмента я думаю, что вы идете в направлении «не нужно быть таким сложным», по крайней мере, для утверждения case: -)

Представьте, что у вас есть строка "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

И это все.

Теперь вы можете иметь массивы для единиц, подростков, десятков и т. Д. И выполнять операции, необходимые для составления более сложных слов. Лингвистический гем делает именно это, позволяя делать такие вещи, как:

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

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

Надеюсь, это было полезно; -)

...