2012-04-20 3 views
0

Как я могу изменить следующий код без использования eval. Есть ли способ, которым я могу использовать функцию getroot на основе аргумента при инициализации кучи.Как использовать псевдоним метод на основе ввода от пользователя

class Heap 

    def initialize arr,type=:min 
    newfunc = "get#{type.to_s}".to_sym 
    eval ("class << self; alias #{newfunc} :getroot; end") 
    end 

    def getroot  
    puts "Inside Getroot" 
    end 

end 

a = Heap.new([1,2,3],:max) 
a.getmax      #prints Inside Getroot 

b = Heap.new([1,2,3],:min) 
b.getmin      #prints Inside Getroot 

ответ

3

Удовлетворительно ли это?

class Heap 
    def initialize arr, type=:min 
    newfunc = "get#{type.to_s}".to_sym 
    self.class.class_eval {alias_method newfunc, :getroot} 
    end 
    def getroot 
    puts "Inside Getroot" 
    end 
end 
+0

Thankz Rachel. Это то, что я искал. – ramz

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