问题标签 [metaprogramming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
431 浏览

reflection - 反思:仅适用于框架?

曾经与我一起工作并尊重的人曾对我说,在应用程序代码中不需要使用反射,它应该只在框架中使用。他说的是 J2EE 背景,而我在该平台的专业经验通常证明了这一点。尽管我曾经使用 Java 编写过一次或两次反射应用程序代码。

我对 Ruby on Rails 的体验完全不同,因为 Ruby 非常鼓励您编写动态代码。如果没有反射和元编程,Rails 为您提供的大部分功能根本不可能实现,并且许多相同的技术同样适用于您的应用程序代码并很有用。

  • 您是否同意反射仅适用于框架的观点?我很想听听您的意见和经验。
0 投票
2 回答
2127 浏览

ruby-on-rails - 你如何在 Rails 中动态调用 attr_accessible?

我有一个相当独特的类,它允许其子类声明虚拟字段。子类可以通过调用父类的方法来声明存储为 XML 的虚拟字段,如下所示:

我设法通过一个讨厌的工作让它工作。create_xml_field方法将字段名称存储在 Class 变量中(见下文)。从after_initialize方法内部调用init_xml_fields方法。

够恶心吧?我并不自豪,但我很难让它发挥作用。此外,解决方法不适用于表单参数的大规模分配。

有没有人有经验动态调用 attr_accessible 以允许在子类中进行大规模分配?先感谢您!

为了清楚起见,对这篇文章进行了编辑!

0 投票
3 回答
33060 浏览

ruby - 查找模块中可用的类

我有一个模块MyModule。我动态地将类加载到其中。如何获取在其命名空间中定义的类的列表?

例子:

我应该说每个都f包含“class Foo; end”之类的东西。

你也可以这样想:在 Rails 中,我如何以编程方式找到 ActiveRecord 模块中定义的所有类?

0 投票
11 回答
4343 浏览

reflection - 反射到底是什么,什么时候是一个好方法?

反射究竟是什么?我阅读了有关此主题的 Wikipedia 文章,并了解它是一种元编程,程序可以在运行时自行修改,但这意味着什么?在什么样的情况下这是一个好方法,什么时候最好使用它?

0 投票
4 回答
216 浏览

hash - 如何在 D 中唯一标识用户定义的类型?

我需要生成可以用作D 编程语言中用户定义类型(结构或类)的唯一句柄的东西。最好这将是一个编译时可计算值。我希望句柄与类型的名称相关,并在类型的内部结构(数据布局)发生变化时进行更改,但对于大多数其他编辑(包括将相同类型编译到不同的应用程序)保持不变。

这不是一个安全的事情,所以它不需要很难绕过或任何东西

我目前的想法是使用带有类型名称和成员类型和名称的 MD5 哈希之类的字符串。

有什么想法吗

0 投票
7 回答
23322 浏览

c++ - 在运行时获取模板元编程编译时常量

背景

考虑以下:

这是一个常见的例子,我们可以将斐波那契数的值作为编译时常量:

但是您显然无法在运行时获得该值:

因为fibb不是编译时常量。

问题

所以我的问题是:

在运行时查看此表的最佳方法是什么?最明显的解决方案(“解决方案”应该轻描淡写)是有一个大的 switch 语句:

但是现在表格的大小是非常硬编码的,将其扩展为 40 并不容易。

我想出的唯一一个具有类似查询方法的方法是:

这似乎工作得很好。我看到的唯一两个问题是:

  • 调用堆栈可能很大,因为计算 Fibonacci<2> 需要我们通过 TableMax 一直到 2,并且:

  • 如果该值在表之外,则返回零而不是计算它。

那么我有什么遗漏吗?似乎应该有更好的方法在运行时挑选出这些值。

一个 switch 语句的模板元编程版本可能会生成一个特定数量的 switch 语句?

提前致谢。

0 投票
11 回答
1732 浏览

c++ - C++模板特化问题

我需要一个 C++ 模板,给定一个类型和该类型的对象,它可以根据类型是否为整数做出决定,同时能够访问实际对象。我试过这个

但它不起作用。有什么办法可以实现类似的东西吗?

编辑

我试图实现的是这样的,这将在编译时发生:

您实际上可以在模板实例化中传递指向对象的指针或引用,如下所示:

但显然这一切都是通过推断x的类型来初始化模板,并且x还需要全局声明。我正在尝试做的事情没有用,我认为这在编译时毕竟是不可能的。

0 投票
2 回答
1407 浏览

groovy - 如何在元类中使用该方法更改 groovy 中方法的行为

我想通过以下方式“破坏”Groovy 中的 plus 方法:

我收到 StackOverflowException (这并不奇怪)。

有没有办法在元类的闭包中使用“原始”加法?

0 投票
3 回答
16396 浏览

objective-c - 如何在不引用类的情况下在 Objective C 中调用 +class 方法?

我有一系列“策略”对象,我认为这些对象可以方便地实现为一组策略类的类方法。我为此指定了一个协议,并创建了要遵守的类(如下所示)

然后我有一个符合这个协议的类的数组(就像 CurrentListCounter 一样)

请注意我如何使用对象之类的类(这可能是我的问题 - 在 Smalltalk 中,类是像其他所有东西一样的对象 - 我不确定它们是否在 Objective-C 中?)

我的确切问题是,当我从数组中取出一个策略对象时,我想调用该方法:

我在返回语句上收到警告 - 它说 -countFor: not found in protocol (因此它假设它是我想调用类方法的实例方法)。然而,由于我的数组中的对象是类的实例,它们现在就像实例方法(或者在概念上它们应该是)。

有没有调用类方法的神奇方法?或者这只是一个坏主意,我应该只创建我的策略对象的实例(而不是使用类方法)?

0 投票
1 回答
1476 浏览

powershell - PowerShell 元编程 - 生成高级函数

我正在研究动态构建一堆高级功能。为此,我一直在使用New-PSScript,但它并不能提供我正在寻找的所有灵活性。

我正在阅读有关函数高级参数的手册页,并在帮助文章的末尾看到了有关动态参数的内容,该文章提供了以下示例代码

我想知道是否可以使用 RuntimeDefinedParameter 和属性集合来生成新函数。

一些半伪代码可能看起来像这样。我(认为)我正在尝试构建的两个关键功能是 New-Parameter 和 Add-Parameter。

我是在完全吠叫错误的树吗?如果有其他方法可以做到这一点,我对可能性持开放态度。