面试题答案
一键面试- 代码重构:
- 首先创建一个模块,在模块中定义通用的日志记录方法。
module Logging def log_message(message) puts "Logging: #{message}" end end class ClassA include Logging end class ClassB include Logging end
- 在上述代码中,
Logging
模块定义了log_message
方法。ClassA
和ClassB
通过include
关键字将Logging
模块混入自身,从而获得了log_message
方法。
- 模块和混合的作用及优势:
- 作用:
- 模块:模块是一个定义方法、常量和类的容器。在这个场景中,模块
Logging
封装了通用的日志记录逻辑,提供了一个可复用的代码单元。 - 混合(Mixin):通过
include
关键字将模块混入类中,使得类能够获得模块中定义的方法。这就像类从模块“继承”了这些方法,但与传统继承不同,一个类可以混入多个模块,避免了单继承带来的局限性。
- 模块:模块是一个定义方法、常量和类的容器。在这个场景中,模块
- 优势:
- DRY 原则:避免了在每个类中重复编写相同的日志记录方法,减少了代码冗余。如果日志记录逻辑需要修改,只需要在模块中修改一处,所有混入该模块的类都会自动应用修改。
- 代码组织清晰:将通用的功能提取到模块中,使得类的代码更加简洁,专注于自身特有的功能。同时模块也可以被多个类复用,提高了代码的复用性。
- 灵活性:一个类可以根据需要混入多个模块,实现功能的灵活组合。例如,如果有另外一个
Debugging
模块,类也可以同时混入Logging
和Debugging
模块来扩展功能。
- 作用: