Tag: 元编程

如何根据名字dynamic调用方法?

当名字包含在stringvariables中时,如何dynamic调用方法? 例如: class MyClass def foo; end def bar; end end obj = MyClass.new str = get_data_from_user # eg `gets`, `params`, DB access, etc. str #=> "foo" # somehow call `foo` on `obj` using the value in `str`. 我该怎么做? 这样做是否有安全风险?

有没有可能找出lambda的参数types和返回types?

给定一个lambda,是否有可能找出它的参数types和返回types? 如果是的话,怎么样? 基本上,我想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作为参数的函数模板中使用lambda_traits ,我需要知道它的参数types和函数内的返回types: 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只需要一个参数。 最初,我试图使用std::function作为: template<typename T> […]

重写实例上的特殊方法

我希望有人可以回答这个对Python有很好的理解:) 考虑下面的代码: >>> class A(object): … pass … >>> def __repr__(self): … return "A" … >>> from types import MethodType >>> a = A() >>> a <__main__.A object at 0x00AC6990> >>> repr(a) '<__main__.A object at 0x00AC6990>' >>> setattr(a, "__repr__", MethodType(__repr__, a, a.__class__)) >>> a <__main__.A object at 0x00AC6990> >>> repr(a) '<__main__.A object at 0x00AC6990>' >>> […]

Dockerfiles中的命令行模板

我正在尝试构建一个Dockerfile,用于为多个基础映像构建我的项目(例如,用于多个体系结构的Ubuntu 17.10) 我想要写一些类似的东西 FROM {{ ARCH }}/ubuntu:17.10 … 并有建设时间解决ubuntu:17.10或ppc64le/ubuntu:17.10 。 有没有办法做到这一点? 此外,一个单独的解决方案可能是有两个码头文件,但不知何故将文件的公共部分包括在两个码头文件中。