2010-06-11 67 views
3

我想实现一个为MNesia生成动态查询的函数。如何实现MNesia的动态查询?

例如,当使用这些参数调用函数时;

dyn_query(list, person, [name, age], ["jack", 21]) 

我要查询的Mnesia到列表项目,其“杰克”年龄是在表。

我试图通过使用qlc:q(ListComprehension)和qlc:string_to_handle(“ListComprehension”)来实现此目的。首先由于编译错误而失败,编译器不让我使用函数而不是ListComprehentions和变量而不是像“Item#Table.Field”这样的记录名称。第二次失败,因为erl_eval无法处理记录并抛出像{undefined_record,person}这样的异常。

我应该使用哪种方法?我怎么能解决这些问题?或者我应该使用不同的方法?

谢谢。

+0

记录是编译时结构,您不能在运行时动态使用它。基本上在编译时,所有的记录都被转换成看起来像这样的元组({person,“jack”,21})。由此,运行时无法找到您在说Item#Table.Field时所要求的内容。 有关记录的更多详细信息,请参阅http://www.erlang.org/doc/reference_manual/records.html。 – Lukas 2010-06-11 16:52:12

回答

1

您可以试试“exprecs”。他们进行了说明:

http://forum.trapexit.org/viewtopic.php?p=21790

从描述阅读:

变换增加了访问功能 实例化,检查和 修改记录,而不必 介绍编译时依赖 模块之间。

该页面提供了示例。看看这是否有帮助。