metaprogramming

    8热度

    5回答

    如何将obj转换回名为obj的变量在def中? def foo(bar) bar.some_method_call end foo :obj UPDATE: 最后的代码比这更复杂,但... 我希望能够说 foo :obj ,而不是 foo obj 我正在研究一些类似DSL的语法。而这一改变会让事情更清楚一点。

    2热度

    6回答

    我有一个C文件,我们在其中移动日志记录基础结构。所以 if (logging_level >= LEVEL_FINE) printf("Value at %p is %d\n", p, i); 成为 do_log2(LEVEL_FINE, "Value at %p is %d\n", _ptr(p), _num(i)); do_log2意味着数以2个参数。 所以我需要一个C解析和

    1热度

    4回答

    在Ruby和Python中看到元编程的优点,但在实际工作中绑定到低级语言(如C++和)时,我想到了将两者。一个实例出现在排序任意结构/类的列表的简单问题中。例如: struct s{ int a; int b; }; vector<s> vec; for(int x=0;x<10;x++){ s inst; inst.a = x; inst

    1热度

    2回答

    给出: module A class B end end b = A::B.new ,我们希望能够得到模块嵌套数组。如果班级事先知道,可以这样做。例如: module A class B def get_nesting Module.nesting # => [A::B, A] end end end 但是,如

    0热度

    2回答

    我正在努力扩展rspec中的存根方法的NotAMock框架,并获取存根以产生方法块。 code in this Gist完美工作,当我自己编写它(这是完成类似于如何Notamock存根方法)。 但是,当我将object.instance_eval ...代码合并到NotAMock框架中时,“block_given?”总是返回错误,因此我永远无法让我的收益工作。该方法被正确添加,并且我可以调用stu

    1热度

    5回答

    我感兴趣的人会如何得到这个工作去: me = "this is a string" class << me alias :old<< :<< def <<(text) old<<(text) puts "appended #{text}" end end 我想,当某样东西附加到me变量,对象将使用重新定义的方法。 如果我尝试运行这个,我得到

    8热度

    3回答

    例如,如果我执行Groovy脚本,其修改字符串的元类,添加一个方法foo() GroovyShell shell1 = new GroovyShell(); shell1.evaluate("String.metaClass.foo = {-> delegate.toUpperCase()}"); 当我创建之后,一个新的外壳,并执行它,这些变化仍然存在 GroovyShell shell2

    8热度

    2回答

    我们的框架需要一些丑陋的样板代码包装某些功能: def prefix_myname_suffix(obj): def actual(): print 'hello world' obj.register(actual) return obj 我想这可能与一装饰被简化: @register def myname(): print 'hello

    3热度

    2回答

    我试着做一些元编程,并想知道作为块参数传递的变量的名称参数变量的名称: z = 1 # this variable is still local to the block Proc.new { |x, y| local_variables }.call # => ['_', 'z', x', 'y'] 我不太清楚如何区分块外定义的变量和列表中的块参数。有没有其他方式可以反映这一点?

    0热度

    1回答

    一类从Snipplr 确定这里是脚本代码,在注释中的问题,并抛出 class Class1 { def closure = { println this.class.name println delegate.class.name def nestedClos = { println owner.class.name }