Направляющие: у меня есть метод класса, и я хочу изменить что-то вроде экземпляра

Направляющие: у меня есть метод класса, и я хочу изменить что-то вроде экземпляра

что-то вроде этого:

class Test < Main
   template :box

   def test
      # here I want to access the template name, that is box
   end
end

class Main
   def initialize
   end

   def self.template(name)
      # here I have to save somehow the template name
      # remember is not an instance.
   end
end

это подобно образцовым классам:

# in the model
has_many :projects

Как я делаю это?

Править:

class Main
  def self.template(name)
    @name = name
  end

  def template
    Main.instance_eval { @name }
  end
end

class Test < Main
    template 6
end

t = Test.new.template
t # t must be 6
1
задан aarona 6 June 2010 в 08:55
поделиться

2 ответа

Вы придется закусить пулю и изучить метапрограммирование на Ruby. Об этом есть книга.

http://pragprog.com/titles/ppmetr/metaprogramming-ruby

Вот один из способов сделать это.

class M
  def self.template(arg)
    define_method(:template) do
      arg
    end
  end
end

class T < M
  template 6
end

t = T.new

puts t.template
1
ответ дан 3 September 2019 в 00:08
поделиться

Есть несколько различных способов сделать это. Вот один из них:

class Main
  def self.template(name)
    @name = name
  end
end

class Test < Main
  def test
    Main.instance_eval { @name }
  end
end

Main.template 5
Test.new.test
  ==> 5
1
ответ дан 3 September 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: