metaprogramming相关内容
我有一个ClassSymbol,我想生成一个抛出???的零参数方法。以下是我的尝试: 假定object Test是我们拥有的ClassSymbol类型。 I. val sym = //the ClassSymbol val tpe = tq"$sym.type" q"def foo(): $tpe = ???" 结果: [error] stable identifie
..
我知道从类级别确保单个实例要容易得多,而且Jonathan Stowe提供了出色的Staticish模块,它通过使用角色来实现相同的功能,但我只想尝试更好地理解如何处理class higher order working,主要是为了FOSDEM演讲。我可以想出几种在元模型级别执行操作的方法,但最终我想出了以下方法: my class MetamodelX::Singleton is Meta
..
实际上我想要的是Capstrano脚本(它是基于rake的)。 如何转换多个任务,如下所示: desc 'Runs rake db:seed' task :seed do on roles :db do within release_path do with rails_env: fetch(:rails_env) do execute :rak
..
除def之外,class_eval&;instance_eval的工作方式有什么不同?class_eval块def将方法定义为类本身(即实例方法),而instance_eval块def将方法定义为类的特征类(即类方法)。AFAIK所有其他功能在这两种情况下的工作方式相同(例如,定义常量的define_method、attr_accessor、class
..
关于this question,有人能解释一下并发布元编程的示例代码吗?我在谷歌上搜索了这个词,但我找不到任何例子来说服我,它可以有任何实际用途。 同样,Qt's Meta Object System是元编程的一种形式吗? JRH 推荐答案 到目前为止,大多数示例都对值进行了操作(计算pi的位数、N的阶乘或类似的值),这些都是教科书上的示例,但通常不是很有用。很难想象有哪种
..
这些是我的一些函数,我需要编写一个公共函数来查看函数是否正常运行。我尝试了try/catch方法。但我只能对每个函数单独执行此操作。 function fisrt(){ console.log("First"); }; function second(){ console.log("Second"); } function third(){ console.log("Third")
..
假设,我有一个 STL 容器 type(不是对象),比如 vector.现在它的 value_type 是 A,所以我想把它改成 B. 基本上,我想要一个这种形式的类模板,或者它的变体: template结构 change_value_type{typedef/*....*/new_container;}; 以便我可以通过以下方式使用它: typename change_value_t
..
在 GCC 上使用 C++11 进行可变参数模板编程时,偶尔会收到一条错误消息,提示“抱歉,未实现:无法将 '标识符...' 扩展为固定长度的参数列表."如果我删除代码中的“...",我会得到一个不同的错误:“错误:参数包没有用'...'扩展". 因此,如果我输入了“...",则 GCC 将其称为错误,如果我将“..."取出,则 GCC 也将其称为错误. 我能够处理这个问题的唯一方法是
..
我想重新定义或覆盖 Base 中的一些函数,而用户不会注意到这一点.我前段时间发现了这个技巧: original_stderr = STDERR重定向标准错误()# 代码重定向标准错误(原始标准错误) 这对我来说变成了重复的模式,所以我做了一个宏: macro suppress_err(block)引用orig_err = STDERR重定向标准错误()val = $块重定向标准错误(ori
..
按照 this answer 的方法,我试图了解究竟发生了什么以及表达式和生成的函数在 Julia 中是如何工作的元编程的概念内. 目标是使用表达式和生成函数优化递归函数(具体示例,您可以查看上面提供的链接中回答的问题). 考虑以下修改后的斐波那契函数,其中我想计算斐波那契数列直到 n 并将其乘以一个数字 p. 简单的递归实现是 函数 fib(n::Integer, p::Re
..
我想用元编程回答这个问题,但是for的范围规则循环导致我的变量没有在最上层(REPL)范围内定义: 对于 x = [:A1, :A2]@eval x = rand(2,2)结尾 我知道可能有一个简单的方法可以解决这个问题,但我周五晚上的大脑想不出一个.你们中的一个元编程迷可以帮我找到一个简洁的解决方案吗?(我意识到宏可能适用于转义,但我正在尝试想一些更短的东西) 解决方案 如果你只想在
..
如何过滤元组中的重复类型? 例如: 使用元组 = std::tuple使用 FilteredTuple = without_duplicates; 其中 without_duplicates 的实现方式是生成以下 FilteredTuple 类型: std::tuple 解决方案 这应该可行: 模板结构包含;模板
..
假设我有一些这样的结构: struct MyStruct1 {内联无效 DoSomething() {cout 如您所见,对于所有三个结构,我可以在该结构的一个对象上调用 DoSomething() 并让它工作(尽管每个结构的实现方式不同): MyStruct1 a;MyStruct2 b;MyStruct3 c;a.DoSomething();//有效,调用 Struct1 的实例函数b
..
这纯粹是一个实验,但我想知道是否可以通过某种元编程在运行时获取 require 的 gem 列表.例如,假设我有: 需要'rubygems'需要'sinatra'需要'nokogiri'# 不知道在这里做什么 如何在运行时打印出以下内容? 此应用需要 rubygems、sinatra、nokogiri 解决方案 你不能完全做到这一点,因为需要一个文件可能需要其他文件,而 Ruby 无
..
在最近的一次采访中,我被问到一个非常奇怪的问题.面试官问我如何仅使用编译器功能计算 1+2+3+...+1000.这意味着我不能编写程序并执行它,但我应该只编写一个程序,它可以驱动编译器在编译时计算这个总和,并在编译完成时打印结果.作为提示,他告诉我我可以使用编译器的泛型和预处理器特性.可以使用 C++、C# 或 Java 编译器.有什么想法??? 这个问题与在没有任何循环的情况下计算总和无
..
不久前,我需要一个在 VBScript 中合理导入库的解决方案. 作为参考,VBScript 没有内置的导入功能.导入文件的传统方法是使用 SSI,它将包含的内容逐字转储到包含器中.由于多种原因,这不是最理想的:无法避免多次包含,无法指定库目录等.所以我编写了自己的函数.这相当简单,使用带有字典的 executeGlobal 来跟踪导入的模块并将整个东西包装在一个对象中进行封装: 类 Im
..
Python 为我们提供了很多关于实例/类属性的可能性,例如: A 类(对象):def __init__(self):self.foo = "你好"a = A() 有很多方法可以访问/更改self.foo的值: 直接访问a.foo 内部字典 a.__dict__['foo'] 获取和设置a.__get__和a.__set__,当然还有两个预定义的方法. getattribute a
..
我对 Java 5 注释有点陌生,我很好奇其中任何一个是否可行: 这个注解会为你生成一个简单的getter和setter. @attribute私有字符串 var = ""; @NotNull 注释表示变量不能为空,因此您不必每次都编写样板代码. /** @param s @NotNull*/公共无效 setString(String s){...} 这些都行吗?如果可以的话,它们似
..
假设我想要一些规则都遵循相同的模式.当我想通过明确列出所有可能的第一个参数来避免非确定性行为时,我遇到了这种情况.然而,我知道,对于某些可能性,我需要做同样的事情.处理它的一种方法是在末尾添加一个包罗万象的子句: foo(a) :-/* 做某事 */.foo(b) :-/* 做别的事*/.富(_)./* 忽略其余部分 */ 但这不是很好,因为我实际上不知道是否有意外的输入,或者我的程序是否出错
..
我正在开发一个具有基于消息/异步代理类架构的应用程序.将有几十种不同的消息类型,每种都由 C++ 类型表示. 类 message_a{long long 标识符;加倍一些值;类的东西_else;...//更多数据成员} 是否可以编写允许在编译时计算类中数据成员数量的宏/元程序? //例如: 类 message_b{long long 标识符;字符 foobar;}位集
..