问题标签 [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.
python - 来自对象字段的 Python 字典
你知道是否有一个内置函数可以从任意对象构建字典吗?我想做这样的事情:
注意:它不应该包括方法。只有字段。
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 继承的生成的异常类型。
为了澄清,我有两个问题:
为什么 NameError 是一个 Ruby 内置异常,a
kind_of?(Amazon::AWS::Error)
是一个模块?
答:include Amazon::AWS::Error
我在文件顶部说过,认为它有点像 Java 导入或 C++ 包含。这实际上所做的是将Amazon::AWS::Error
(现在和将来)中定义的所有内容添加到隐式内核类中,该类是每个类的祖先。这意味着任何事情都会过去kind_of?(Amazon::AWS::Error)
。如何最好地将动态创建的异常与
Amazon::AWS::Error
来自其他地方的随机其他异常区分开来?
ruby-on-rails - 以 DRY 方式覆盖 ActiveRecord 中的“查找”
我有一些模型需要自定义查找条件。例如,如果我有一个 Contact 模型,每次调用 Contact.find 时,我都想限制返回的联系人只属于正在使用的 Account。
我通过谷歌找到了这个(我已经定制了一点):
这很好用,除了 account_id 不明确的少数情况,所以我将其调整为:
这也很好用,但是,我希望它是干燥的。现在我有几个不同的模型,我希望使用这种功能。做这个的最好方式是什么?
当您回答时,请包含代码以帮助我们理解元编程 Ruby-fu。
(我使用的是 Rails v2.1)
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 的工作非常令人鼓舞,现在正在走向实施....非常兴奋
ruby - 你如何将参数传递给define_method?
我想将参数传递给使用 define_method 定义的方法,我该怎么做?
c++ - C++ 模板元编程的最佳介绍?
静态元编程(又名“模板元编程”)是一种很棒的 C++ 技术,它允许在编译时执行程序。当我读到这个典型的元编程示例时,我的脑海中突然闪过一个灯泡:
如果想了解更多关于 C++ 静态元编程的知识,最好的资源是什么(书籍、网站、在线课件等)?
java - Java 中可以进行静态元编程吗?
我是C++ 中静态元编程的粉丝。我知道Java现在有泛型。这是否意味着静态元编程(即编译时程序执行)在 Java 中是可能的?如果是这样,任何人都可以推荐任何可以了解更多信息的好资源吗?
ruby - 为什么我的 Ruby 代码中出现“参数数量错误(0 表示 2)”异常?
我试图通过从“测试驱动开发:示例”中重新编写 Kent Beck 的 xUnit Python 示例来完善我的 Ruby。我已经走了很远,但现在我在运行时收到以下错误,我不知道。
我的代码如下所示:
谁能指出我明显的错误?
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