我目前正在尝试使用
Ruby和Rails,我在关于元编程的教程和书籍中有几个部分.许多人提到它是Ruby的重要组成部分,但它们并没有真正详细说明.这就好像元编程是Ruby程序员的最后边界.来自.NET背景我很难理解它为什么如此有用.
>使用元编程有什么好处?
>什么是特征类,它与单例有什么不同?
>在什么情况下使用元编程常见?
>使用代码修改其他代码的行为有什么道德含义,特别是不属于您自己的代码?
解决方法
>使用元编程有什么好处?
您可以创建比没有它更具表现力的API(例如,ActiveRecord使用元编程来根据表的列名定义访问器方法,因此您可以编写像person.age之类的东西而不是像person.read_attribute(“age”)这样的东西,其中person是一个活动的记录对象,人员表有一个名为age的列,你可以用比你原来少得多的代码完成一些事情.
>什么是特征类,它与单例有什么不同?
术语“本征类”和“单一类”在ruby的上下文中可互换使用.
>在什么情况下使用元编程常见?
在您需要大量锅炉板代码或创建DSL的情况下.
用例1的示例:
而不是写这样的锅炉板代码:
class Foo def bar @bar end def bar=(b) @bar = b end def baz @baz end def baz=(b) @baz = b end end
您可以使用元编程方法attr_accessor编写这么短的代码,它会根据您给出的参数自动定义具有名称的getter和setter方法:
class Foo attr_accessor :foo,:bar end
如果attr_accessor在标准库中不存在,你可以像这样自己定义它(让你知道ruby中的元编程是什么样的):
class Module def attr_accessor(*variable_names) variable_names.each do |variable_name| define_method( variable_name ) do instance_variable_get( "@#{ variable_name }" ) end define_method( "#{ variable_name }=" ) do |value| instance_variable_set( "@#{ variable_name }",value) end end end
结束
>使用代码修改其他代码的行为有什么道德含义,特别是不属于您自己的代码?
没有.