Ruby 元编程与内部 DSL 开发:灵活编程的艺术
1. 用 define_method 更好地创建方法
在 Ruby 中,使用 class_eval 结合字符串来创建新方法虽然有一定的清晰度,例如可以打印出字符串并查看正在定义的方法,但这种方式并非理想之选。通常,如果有更常规的 API 可选,我们会避免使用“即时评估代码”类型的方法。而定义新方法时, define_method 就是一个很好的替代方案。
使用 define_method 时,需要传入新方法的名称和一个代码块。调用该方法后,会得到一个具有指定名称的新方法,调用该新方法时会执行代码块。代码块的参数会成为新方法的参数。以下是使用 define_method 重构 paragraph_type 方法的示例:
class StructuredDocument
def self.paragraph_type( paragraph_name, options )
name = options[:font_name] || :arial
size = options[:font_size] || 12
emphasis = options[:font_emphasis] || :none
define_method(paragraph_name) do |text|
paragraph = Paragraph.new( name, size, emphasis, text
超级会员免费看
订阅专栏 解锁全文
30

被折叠的 条评论
为什么被折叠?



