Мета-программирование в рельсах - PullRequest
0 голосов
/ 22 января 2020

У меня есть класс по имени Person методы добавляются в name, description, nick_name, но эти методы экземпляра имеют одинаковый набор кода

class Product
  def name
    p "this is the name of the product"
  end

  def description
    p "this is the descriptions of the product"
  end

  def nick_name
    p "this si the description of the nick name"
  end
end

class Person < Product
  %w(name description nick_name).map{|attr| attr.to_sym}.each do |definable_method|
    define_method definable_method do
      print "this is the #{definable_method} in the person"
      super
    end
  end  
end
 p1 = Person.new
 p1.name

Ожидаемый результат

 this is the name in the person
 this is the name of product
p1.description

Ожидаемый результат

  this is description in the person
  this is the descriptions of product

1 Ответ

0 голосов
/ 22 января 2020

Попробуйте с этим кодом

class Product
  def name
    p "this is the name of the product"
  end

  def description
    p "this is the descriptions of the product"
  end

  def nick_name
    p "this si the description of the nick name"
  end
end

class Person < Product
  %w(name description nick_name).map{|attr| attr.to_sym}.each do |definable_method|
    define_method definable_method do
      print "this is the #{definable_method} in the person\n"
      super()
    end
  end
end

p1 = Person.new
p1.name

...