【问题标题】:Meta Programming, whats it good for?元编程,它有什么用?
【发布时间】:2010-08-05 13:19:11
【问题描述】:

所以元编程——你可以在运行时修改类/对象,注入新的方法和属性的想法。我知道它对框架开发有好处;一直在使用 Grails,并且该框架在运行时向您的类添加了一堆方法。您在 User 对象上有一个 name 属性,然后,您会在运行时注入一个 findByName 方法。

  1. 我的描述是否完整地描述了这个概念?
  2. 除了框架开发之外,它对(具体示例)还有什么好处?

【问题讨论】:

  • 它有什么用?绝对没有。
  • 正如一些答案所指出的,您的描述不正确。您的描述似乎是指反射和面向方面的编程(AOP)。这两个扩展了语言在运行时的能力。元编程在编译时扩展了语言的能力,特别是对类型进行操作的能力(在类型系统中)。另一方面,反射增加了在运行时对类型进行操作的能力。

标签: metaprogramming


【解决方案1】:

对我来说,元编程是“编写程序的程序”。

元编程特别适合重用,因为它支持泛化:您可以定义属于特定模式的概念的。然后,通过可变性,您可以将该概念应用到类似但不同的场景中。

最简单的例子是@Sjoerd 提到的Java 的getter 和setter:

getter 和 setter 都遵循明确定义的模式:getter 返回类成员,setter 设置类成员的值。通常,您构建所谓的 模板 以允许应用和重用该特定模式。模板的工作方式取决于所使用的元编程/代码生成方法。

如果您希望 getter 或 setter 以稍微不同的方式运行,您可以在模板中添加一些参数。这是可变性。例如,如果您想在获取/设置时添加额外的处理代码,您可以添加一个代码块作为可变性参数。混合自定义代码和生成的代码可能很棘手。 ABSE 是目前我所知道的唯一一种本机支持自定义代码直接作为模板参数的 MDSD 方法。

【讨论】:

    【解决方案2】:

    元编程不仅是在运行时添加方法,它还可以在编译时自动创建代码。 IE。代码生成代码。

    • Web 服务(即方法是在 WSDL 中定义的,并且您希望像使用对象上的真实方法一样使用它们)
    • 避免样板代码。例如,在 Java 中,您应该使用 getter 和 setter,但大多数属性都可以自动生成。

    【讨论】:

    • 我认为元编程是一种运行时的东西。有趣的。关于样板代码的要点(Grails 也这样做)。还有什么?
    • @hvgotcodes:元编程主要是关于编译时;与运行时使用相比,运行时使用实际上非常罕见。见 f.e. C++ 模板(这是一种元编程,尽管没有多少人愿意承认这一点):所有使用 STL 的程序……有很多。
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2012-02-22
    • 2021-07-27
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多