Ruby的多态性允许对象对不同的对象做出响应,就像它们是对相同的方法的调用一样。这种特性可以极大地提高代码的灵活性和可扩展性。为了优化Ruby代码结构,可以通过以下方式利用多态性:
class Animal
def speak
raise NotImplementedError, "Subclass must implement this method"
end
end
class Dog < Animal
def speak
"Woof!"
end
end
class Cat < Animal
def speak
"Meow!"
end
end
animals = [Dog.new, Cat.new]
animals.each(&:speak) # 输出: ["Woof!", "Meow!"]
def make_sound(animal)
animal.speak
end
module Swimmable
def swim
"I can swim!"
end
end
class Duck < Animal
include Swimmable
end
duck = Duck.new
puts duck.swim # 输出: "I can swim!"
respond_to?
方法:这个方法可以用来检查一个对象是否对某个特定的方法有定义,从而决定是否调用它。def animal_sound(animal)
if animal.respond_to?(:speak)
animal.speak
else
"This animal doesn't speak."
end
end
send
方法:这个方法允许你调用对象上的任何方法,只要你知道方法名。def animal_sound(animal, method_name)
animal.send(method_name)
end
通过这些方法,你可以利用Ruby的多态性来编写更加灵活、可维护和可扩展的代码。