2013-01-19 7 views
0

В рубина я могу сказать (я взял Mongoid только для примера)Получить доступ к типу по имени в Руби

class MyItem 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    #................. 

    def method1(some_type) 
    raise "Not symbol" unless some_type.is_a?(Symbol) 
    raise "Unsupported some_type (#{some_type})" unless [:some_type1, :some_type2, :some_type3].include?(some_type) 
    min_time_to_update = 60*60 
    full_method_name = "#{some_type}_another_method".to_sym() 

    !!self.send(full_method_name) 
    end 
end 

и назвать его

result = MyItem.first.method1(:some_type2) 

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

def method1(type, arg1, arg2) 
    #check if it's a correct type.... 
    # type might be either MyItem1 or MyItem2 or anything that has a method `method123` 
    "#{type}".method123(arg1, arg2) 
    end 

Как я могу это сделать? Как я могу получить доступ к типа по его названию, чтобы вызвать его метод?

+0

Что такое 'list_type'? Что такое 'MyItem # first'? Объясните все методы или локальные переменные, которые не являются стандартными. Кроме того, в Ruby используется слово «class». Использование «типа» затрудняет немедленное понимание и накладывает дополнительное бремя на читателя. – sawa

ответ

2

type, являющийся строкой, например. 'MyItem1' или 'MyItem2'?

Пробег: Object.const_get(type).method123(arg1, arg2).

Смежные вопросы