如何在不使用eval的情况下更改以下代码。有没有办法在初始化Heap时根据参数对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
答案 0 :(得分: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