Questions tagged «metaprogramming»

元编程是对宏或元类的编程环境进行重新编程的功能。



4
在Ruby中使用具有方法名称的字符串调用方法
我该怎么做什么,他们都在谈论这里,但在红宝石? 您将如何对对象执行功能?以及如何执行全局功能(请参阅提到的帖子上的jetxee 回答)? 示例代码: event_name = "load" def load() puts "load() function was executed." end def row_changed() puts "row_changed() function was executed." end #something here to see that event_name = "load" and run load() 更新: 如何获得全局方法?还是我的全局功能? 我尝试了这条额外的线 puts methods 并在未列出的位置加载和row_change。


5
一行Python代码可以知道其缩进嵌套级别吗?
从这样的事情: print(get_indentation_level()) print(get_indentation_level()) print(get_indentation_level()) 我想得到这样的东西: 1 2 3 代码可以这样读取吗? 我想要的只是更多嵌套代码部分的输出。以使代码易于阅读的方式,使输出易于阅读。 当然,我可以使用eg手动实现此功能.format(),但是我想到的是自定义打印功能,该功能print(i*' ' + string)在哪里i是缩进级别。这将是使终端上的输出可读的一种快速方法。 有没有更好的方法可以避免麻烦的手动格式化?

15
在C ++中方便地声明编译时字符串
能够在C ++中的编译期间创建和操作字符串有几个有用的应用程序。尽管可以用C ++创建编译时字符串,但是该过程非常繁琐,因为需要将字符串声明为可变的字符序列,例如 using str = sequence<'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'>; 诸如字符串连接,子字符串提取等操作很容易实现为对字符序列的操作。是否可以更方便地声明编译时字符串?如果没有,那么作品中是否有建议可以方便地声明编译时字符串? 为什么现有方法失败 理想情况下,我们希望能够声明如下编译时字符串: // Approach 1 using str1 = sequence<"Hello, world!">; 或者,使用用户定义的文字, // Approach 2 constexpr auto str2 = "Hello, world!"_s; 哪里decltype(str2)会有constexpr构造函数。可以利用以下事实来实现方法1的更混乱的版本: template <unsigned Size, const char Array[Size]> struct foo; …

4
是否可以找出lambda的参数类型和返回类型?
给定一个lambda,是否可以弄清楚它的参数类型和返回类型?如果是,怎么办? 基本上,我希望lambda_traits可以通过以下方式使用它: auto lambda = [](int i) { return long(i*10); }; lambda_traits<decltype(lambda)>::param_type i; //i should be int lambda_traits<decltype(lambda)>::return_type l; //l should be long 其背后的动机是,我想lambda_traits在接受lambda作为参数的函数模板中使用,并且我需要知道函数内部的参数类型和返回类型: template<typename TLambda> void f(TLambda lambda) { typedef typename lambda_traits<TLambda>::param_type P; typedef typename lambda_traits<TLambda>::return_type R; std::function<R(P)> fun = lambda; //I want to do this! //... } 就目前而言,我们可以假设lambda正好采用了一个参数。 …

4
是否可以在JavaScript中实现动态获取器/设置器?
我知道如何通过执行以下操作为名称已知的属性创建吸气剂和吸气剂: // A trivial example: function MyObject(val){ this.count = 0; this.value = val; } MyObject.prototype = { get value(){ return this.count < 2 ? "Go away" : this._value; }, set value(val){ this._value = val + (++this.count); } }; var a = new MyObject('foo'); alert(a.value); // --> "Go away" a.value = …


7
元编程到底是什么?
我正在阅读有关Java平台上的ployglot编程的 TheServerSide文章。本文中的一些评论将元编程称为生成代码的能力(也许是在运行中)。 元编程是在运行时即时生成代码的能力,还是在运行时将方法和属性注入到现有对象中的能力(例如某些动态语言(如Python,Ruby和Groovy所允许的))。

13
如何在编译时驱动C#,C ++或Java编译器来计算1 + 2 + 3 +…+ 1000?
在最近的一次采访中,有人问我一个非常奇怪的问题。面试官问我如何仅使用编译器功能来计算1 + 2 + 3 + ... + 1000。这意味着我不允许编写程序并执行它,但是我只应该编写一个程序,该程序可以驱动编译器在编译时计算此和,并在编译完成时打印结果。作为提示,他告诉我,我可能会使用编译器的泛型和预处理器功能。可以使用C ++,C#或Java编译器。有任何想法吗??? 这个问题与此处未询问任何循环的求和无关。另外,应该注意,总和应该在编译期间计算。使用C ++编译器指令仅打印结果是不可接受的。 阅读有关发布的答案的更多信息后,我发现使用C ++模板在编译过程中解决问题称为metaprogramming。这是Erwin Unruh博士在标准化C ++语言的过程中偶然发现的一项技术。您可以在meta-programming的Wiki页面上阅读有关此主题的更多信息。似乎可以使用Java注释用Java编写程序。您可以在下面查看maress的答案。 关于用C元编程++一个很好的书是这一个。如果有兴趣的话值得一看。 Boost的MPL 这个链接是一个有用的C ++元编程库。


8
最好的C ++模板元编程介绍?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 3年前关闭。 改善这个问题 静态元编程(也称为“模板元编程”)是一种很棒的C ++技术,它允许在编译时执行程序。阅读以下规范元编程示例后,一个灯泡突然在我的头上掉了: #include <iostream> using namespace std; template< int n > struct factorial { enum { ret = factorial< n - 1 >::ret * n }; }; template<> struct factorial< 0 > { enum { ret = 1 }; }; int main() { cout …

1
小马(ORM)如何发挥作用?
Pony ORM很好地把生成器表达式转换成SQL。例: >>> select(p for p in Person if p.name.startswith('Paul')) .order_by(Person.name)[:2] SELECT "p"."id", "p"."name", "p"."age" FROM "Person" "p" WHERE "p"."name" LIKE "Paul%" ORDER BY "p"."name" LIMIT 2 [Person[3], Person[1]] >>> 我知道Python具有出色的自省和内置元编程功能,但是该库如何能够在不进行预处理的情况下转换生成器表达式?看起来像魔术。 [更新] 搅拌器写道: 这是您要查找的文件。似乎可以使用一些自省向导来重构生成器。我不确定它是否支持100%的Python语法,但这很酷。- 搅拌机 我以为他们正在研究生成器表达协议中的某些功能,但正在查看此文件并看到其中ast涉及的模块...不,他们不是在动态检查程序源,是吗?令人振奋... @BrenBarn:如果我尝试在select函数调用之外调用生成器,则结果为: >>> x = (p for p in Person if p.age > 20) >>> …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.