Как определить метод для определенного атрибута класса в Ruby?

#ruby #class #methods

#ruby #класс #методы

Вопрос:

У меня есть несколько Ruby-вопросов. Пусть у меня есть класс Cat. Cat имеет атрибут age, который является Class::Integer . Как я могу добавить method .humanize, который будет вычислять эквивалент человеческого возраста для всех кошек в моем проекте? т.е. …

 @cat.age #=> 2
@cat.age.humanize #=> 20
@tree.age #=> 5
@tree.age.humanize #=> NO METHOD ERROR!!! OH, YEAH!
  

Комментарии:

1. @everm1ind, люди будут избегать ваших вопросов, если вы никогда не принимаете ответы. Вы должны просмотреть все ответы, которые вам были даны на каждый вопрос, и установить флажок рядом с наиболее полезными, если вы хотите, чтобы к StackOverflow относились серьезно.

Ответ №1:

Это называется метапрограммированием. Вы можете выполнить то, что хотите, выполнив следующее:

 def @cat.humanize_age
  return @age * 10
end
  

Вы можете добавить метод в Integer класс изнутри Cat самого себя:

 class Cat
  attr_accessor :age

  def initialize(a)
    @age = a
    add_meta
  end

  def add_meta
    def @age.humanize
      return self * 10
    end
  end
end