标签: metaprogramming

Groovy:向闭包添加一个方法

我有以下关闭

def closure = {
   println ("closure code")
}
Run Code Online (Sandbox Code Playgroud)

我想为它添加一个方法.但如果我试试

 closure.metaClass.fun = { c->
        c.call();
        println ("extra code");
 }   
Run Code Online (Sandbox Code Playgroud)

我得到一个例外

groovy.lang.MissingPropertyException: No such property: fun for class: org.codehaus.groovy.runtime.metaclass.ClosureMetaClass
Run Code Online (Sandbox Code Playgroud)

读另一个答案,我也盲目地试着打电话

ExpandoMetaClass.enableGlobally()
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有没有办法实现我想要的东西?

groovy closures metaprogramming

0
推荐指数
1
解决办法
550
查看次数

如何解决,在使用元编程的条件基类的情况下没有成员函数"print"

.header

template<class T>
struct type_is
{
 using type = T; 
};

template<bool, class T, class>
struct IF_t : type_is<T> {};

template<class T, class F>
struct IF_t<false, T, F> : type_is<F> {};

class Base1
{
public:
void print()
{
    std::cout << "Base 1" << std::endl;
}
};

class Base2
{
public:
void print()
{
    std::cout << "Base 2" << std::endl;
}
};

template <int q>
class Derived : IF_t<(q > 0), Base1, Base2>
{
};

class MultipleBaseTemplateMetaProg {
public:
void print() …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance metaprogramming template-meta-programming

0
推荐指数
1
解决办法
97
查看次数

为什么Ruby告诉我:class是在Class(Kernel)上定义的而不是Object?

使用Ruby中的任何类,并询问某些方法的定义:

Object.method :name
#<Method: Class(Module)#name>
Run Code Online (Sandbox Code Playgroud)

太好了.所以,我可以使用pry或者访问ruby-doc.org并阅读关于Module上定义的:name方法.

我的问题是,这里发生了什么:

Object.method :class
#<Method: Class(Kernel)#class>
Run Code Online (Sandbox Code Playgroud)

我没有看到在内核模块上定义了:class方法.我看到它在Object类上定义.有人可以为我澄清一下吗?

ruby metaprogramming

0
推荐指数
1
解决办法
63
查看次数

ruby-动态定义模块

在我的项目中使用的示例模块(n个数字)下面,具有相同的方法名称,具有不同的返回值(带模块名称的前缀).

module Example1
 def self.ex_method
   'example1_with_'
 end
end


module Example2
 def self.ex_method
   'example2_with_'
 end
end
Run Code Online (Sandbox Code Playgroud)

我尝试使用像#define_method这样的元编程方式来实现这一点.但是,这对我不起作用.有什么办法吗?

array.each do |name|
  Object.class_eval <<TES
    module #{name}
      def self.ex_method
        "#{name.downcase}_with_"
      end
    end
  TES
end
Run Code Online (Sandbox Code Playgroud)

错误捕捉:你可以在最后一行看到它没有完成.

在此输入图像描述

ruby metaprogramming dynamic

0
推荐指数
1
解决办法
1704
查看次数

带有一个显式参数的模板

我尝试将另一个模板参数添加到元编程的阶乘示例中.但以下不起作用.什么是正确的方法?

码:

#include <iostream>

template <typename T, int Depth>
inline void loop(T i){
    std::cout << i;
    loop<T, Depth-1>(i - 1);
}
template <typename T, int Depth>
inline void loop<T, 0>(T i){
    std::cout << i << std::endl;
}

int main(void){
    int i = 10;
    loop<int, 3>(i);
}
Run Code Online (Sandbox Code Playgroud)

错误:

test4.cpp(9): error: an explicit template argument list is not allowed on this declaration
  inline void loop<T, 0>(T i){
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming template-meta-programming

0
推荐指数
1
解决办法
154
查看次数

std :: index_sequence返回大小始终为1

我是C++ 14的新手std::index_sequence.size结构的成员是什么意思?无论我创造了多少元素,它总是返回一个.

std::integer_sequence<int, 1, 2, 3>::size  => 1
std::index_sequence<8, 7, 1, 5>::size => 1 
Run Code Online (Sandbox Code Playgroud)

我虽然返回值应该是3和4(该序列的元素数).

c++ metaprogramming c++14

0
推荐指数
1
解决办法
95
查看次数

Ruby:如何找到模块的所有类方法

例如,我有这个代码:

module ExampleModule
  def self.module_method
  end

  def normal_method
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我试着打电话 ExampleModule.instance_methods,我只能看到normal_method.我也搜索过,singleton_class但看起来Ruby没有把类方法放在里面singleton class:

ExampleModule.singleton_class.each do |method|
  print method
end
Run Code Online (Sandbox Code Playgroud)

怎么看self.module_method(只有这个方法,而不是模块ExampleModule的其他父方法).

谢谢

ruby metaprogramming

0
推荐指数
1
解决办法
67
查看次数

编译错误:使用constexpr声明std :: array size

我正在学习,constexpr并且据我所知,它constexpr告诉编译器在编译期间计算函数而不是运行时间.我使用以下代码进行测试,但遇到了一个我真的不明白的错误.你能解释一下原因吗?

#include <iostream>
#include <array>
using namespace std;

constexpr int foo(int i)
{
    return i + 5;
}

int main()
{
    int i = 10;
    std::array<int, foo(5)> arr; // OK
    // But...
    std::array<int, foo(i)> arr1; // Error
}
Run Code Online (Sandbox Code Playgroud)

错误是:' i' 的值在常量表达式中不可用.为什么?i事先声明为什么它必须是一个const

c++ metaprogramming constexpr c++11 stdarray

0
推荐指数
1
解决办法
542
查看次数

Ruby-使用字符串作为变量名称来定义新变量

我有一个字符串数组:

names = ['log_index', 'new_index']
Run Code Online (Sandbox Code Playgroud)

我要做的是从名称创建变量:

names.each { |name| name = [] } # obviously it does not do what I want
Run Code Online (Sandbox Code Playgroud)

这些变量不会在代码中的任何位置之前声明。

我该怎么办?

ruby arrays string metaprogramming ruby-on-rails

0
推荐指数
1
解决办法
1606
查看次数

一个对象如何成为一个类lisp

我试着想出一个更好的名字,但我不能.此外,每个主题都涉及python,我不知道python

我知道dafult :meta-classstandar-class

standard-object是一个实例,standard-class并且每个类都是一个实例standard-class并且继承了所有内容,standard-object但是这怎么可能呢?同样如何standard-object成为一个对象和一个超类呢?它是如何工作的,为什么?

我不明白的是,一个即时课程怎么也可以成为一个班级?

oop inheritance metaprogramming common-lisp

0
推荐指数
1
解决办法
137
查看次数