问题标签 [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 投票
16 回答
551506 浏览

python - 来自对象字段的 Python 字典

你知道是否有一个内置函数可以从任意对象构建字典吗?我想做这样的事情:

注意:它不应该包括方法。只有字段。

0 投票
4 回答
2278 浏览

ruby - Ruby 异常继承与动态生成的类

我是 Ruby 的新手,所以我在理解我遇到的这个奇怪的异常问题时遇到了一些麻烦。我正在使用 ruby​​-aaws gem 访问 Amazon ECS: http: //www.caliban.org/ruby/ruby-aws/。这定义了一个类 Amazon::AWS:Error:

这意味着如果您收到类似的错误代码AWS.InvalidParameterValue,这将产生(在其异常变量中)一个新类Amazon::AWS::Error::InvalidParameterValue,该类是StandardError.

现在这就是奇怪的地方。我有一些看起来像这样的代码:

现在,如果do_aws_stuff抛出 a NameError,我的救援块就会被触发。似乎 Amazon::AWS::Error 不是生成错误的超类 - 我想既然它是一个模块,那么一切都是它的子类?当然,如果我这样做:

它说true,我觉得很困惑,特别是考虑到这一点:

发生了什么,我应该如何将 AWS 错误与其他类型的错误区分开来?我应该做类似的事情:

这似乎异常笨拙。抛出的错误也不是类 AWSError - 它们是这样引发的:

因此,我要查找rescue的异常是仅从 StandardError 继承的生成的异常类型。

为了澄清,我有两个问题:

  1. 为什么 NameError 是一个 Ruby 内置异常,akind_of?(Amazon::AWS::Error)是一个模块?
    答:include Amazon::AWS::Error我在文件顶部说过,认为它有点像 Java 导入或 C++ 包含。这实际上所做的是将Amazon::AWS::Error(现在和将来)中定义的所有内容添加到隐式内核类中,该类是每个类的祖先。这意味着任何事情都会过去kind_of?(Amazon::AWS::Error)

  2. 如何最好地将动态创建的异常与Amazon::AWS::Error来自其他地方的随机其他异常区分开来?

0 投票
3 回答
6700 浏览

ruby-on-rails - 以 DRY 方式覆盖 ActiveRecord 中的“查找”

我有一些模型需要自定义查找条件。例如,如果我有一个 Contact 模型,每次调用 Contact.find 时,我都想限制返回的联系人只属于正在使用的 Account。

我通过谷歌找到了这个(我已经定制了一点):

这很好用,除了 account_id 不明确的少数情况,所以我将其调整为:

这也很好用,但是,我希望它是干燥的。现在我有几个不同的模型,我希望使用这种功能。做这个的最好方式是什么?

当您回答时,请包含代码以帮助我们理解元编程 Ruby-fu。

(我使用的是 Rails v2.1)

0 投票
5 回答
2360 浏览

xml - 用于快速和肮脏的 XML 序列化的 Ruby 代码?

给定一个中等复杂的 XML 结构(数十个元素,数百个属性),没有 XSD 并希望创建一个对象模型,避免编写样板 from_xml() 和 to_xml() 方法的优雅方法是什么?

例如,给定:

如何避免编写无休止的序列:

我不介意明确创建对象结构;这是我确信可以通过一些更高级别的编程来处理的序列化......


我不想为每个类保存一两行(通过将 from_xml 行为移动到初始化程序或类方法等)。我正在寻找复制我的心理过程的“元”解决方案:

“我知道每个元素都将成为类名。我知道每个 XML 属性都将成为字段名。我知道要分配的代码就是 @#{attribute_name} = el.[#{attribute_name} ] 然后递归到子元素。然后在 to_xml 上反向。


我同意“构建器”类加上 XmlSimple 似乎是正确的道路的建议。XML -> 哈希 -> ? -> 对象模型(和利润!)


2008 年 9 月 18 日更新:@Roman、@fatgeekuk 和 @ScottKoon 的出色建议似乎已经解决了问题。我下载了 HPricot 源代码,看看它是如何解决问题的;关键方法显然是 instance_variable_set 和 class_eval 。irb 的工作非常令人鼓舞,现在正在走向实施....非常兴奋

0 投票
4 回答
61363 浏览

ruby - 你如何将参数传递给define_method?

我想将参数传递给使用 define_method 定义的方法,我该怎么做?

0 投票
8 回答
62297 浏览

c++ - C++ 模板元编程的最佳介绍?

静态元编程(又名“模板元编程”)是一种很棒的 C++ 技术,它允许在编译时执行程序。当我读到这个典型的元编程示例时,我的脑海中突然闪过一个灯泡:

如果想了解更多关于 C++ 静态元编程的知识,最好的资源是什么(书籍、网站、在线课件等)?

0 投票
11 回答
13282 浏览

java - Java 中可以进行静态元编程吗?

我是C++ 中静态元编程的粉丝。我知道Java现在有泛型。这是否意味着静态元编程(即编译时程序执行)在 Java 中是可能的?如果是这样,任何人都可以推荐任何可以了解更多信息的好资源吗?

0 投票
2 回答
7568 浏览

ruby - 为什么我的 Ruby 代码中出现“参数数量错误(0 表示 2)”异常?

我试图通过从“测试驱动开发:示例”中重新编写 Kent Beck 的 xUnit Python 示例来完善我的 Ruby。我已经走了很远,但现在我在运行时收到以下错误,我不知道。

我的代码如下所示:

谁能指出我明显的错误?

0 投票
15 回答
3862 浏览

haskell - 用于生成式编程的非 C++ 语言?

C++ 可能是最流行的静态元编程语言,而Java 不支持它

除了 C++ 之外,还有其他语言支持生成式编程(创建程序的程序)吗?

0 投票
5 回答
2056 浏览

ruby - DRY way of re-raising same set of exceptions in multiple places

short:

Is there a way in Ruby to DRY-ify this:

longer:

I'm building an interpreter. This interpreter can be called using different entry points. If I feed this interpreter a 'dirty' string, I expect it to raise an error. However, it would be nice if I don't get spammed by the by the entire back trace of every method called directly or indirectly by do_something, especially since the interpreter makes use of recursion.

As you can see in the above snippet, I already know a way to re raise an error and thereby removing the back trace. What I would like do is remove the duplication in the above example. The closest I have come thus far is this:

But that makes the method re-raise-known-exceptions show up in the back trace.

edit: I guess what I want would be something like a C pre-processing macro