3 Stimmen

Einbinden eines Moduls zur Definition einer dynamischen Klassenmethode

Ich spiele gerade mit Ruby herum und habe den folgenden Code geschrieben:

module IdAndNameRedefine
  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    def use_id_and_name_from_module(use_attribute)
      class_eval <<CODE
        def id_and_name
          "\#{id}-\#{#{use_attribute}.downcase}"
        end
CODE
    end
  end
end

class Model
  include IdAndNameRedefine

  attr_reader :id, :name1, :name2

  def initialize(id, name1, name2)
    @id = id
    @name1 = name1
    @name2 = name2
  end

  def id_and_name
    "#{id}-#{name1}"
  end

  use_id_and_name_from_module :name2
end

model = Model.new(1, "TesT", "Test number TWO")
puts model.id_and_name

Wenn ich hier versuche, die Klassenmethode zu überschreiben id_and_name in der Klasse Model mit einer Methode, die dynamisch von der IdAndNameRedefine -Modul. Wenn dieses Modul eingebunden wird, erstellt es eine "statische" Methode (eigentlich eine Klassenmethode der Model.class, wie ich sie verstehe) und wenn use_id_and_name_from_module aufgerufen wird, wird eine Klassenmethode in Model erstellt, die die id_and_name das gewünschte Attribut von Model zu verwenden.

Meine Frage ist Gibt es eine bessere Möglichkeit, dies zu tun, oder ist dies die "richtige" Art und Weise, dies zu tun? Ich bin nicht wirklich sicher, ob ich wie die class_eval mit nimmt eine Zeichenfolge, wo ich Werte usw. zu entkommen, um diese Arbeit zu machen müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X