在Ruby中,动态派发是指在运行时根据接收者对象的类型来确定调用哪个方法。这种灵活性使得可以根据不同的情况来执行不同的操作,而不需要在编码时确定调用的方法。
动态派发可以应用在很多场景中,比如根据用户输入的不同命令来执行不同的操作,根据不同的数据类型来调用不同的处理方法等。以下是一个简单的示例:
class Animal
def make_sound
raise NotImplementedError, "Subclasses must implement make_sound method"
end
end
class Dog < Animal
def make_sound
puts "Woof!"
end
end
class Cat < Animal
def make_sound
puts "Meow!"
end
end
def make_animal_sound(animal)
animal.make_sound
end
dog = Dog.new
cat = Cat.new
make_animal_sound(dog) # 输出 Woof!
make_animal_sound(cat) # 输出 Meow!
在这个示例中,make_animal_sound
方法根据传入的动物对象来调用make_sound
方法,而不需要在编写方法时指定调用哪个子类的方法。这样就实现了动态派发的功能。