【发布时间】:2011-03-02 13:55:09
【问题描述】:
我正在尝试实现一个为 MNesia 生成动态查询的函数。
例如,当使用这些参数调用函数时;
dyn_query(list, person, [name, age], ["jack", 21])
我想查询 MNesia 以 列出 name 为 "jack" 且 age 为 的项目>21 在 person 表中。
我尝试通过使用 qlc:q(ListComprehension) 和 qlc:string_to_handle("ListComprehension") 来实现这一点。由于编译错误,第一次失败,编译器不允许我使用函数而不是 ListComprehentions 和变量而不是像“Item#Table.Field”这样的记录名称。第二次失败,因为 erl_eval 无法处理记录并抛出了 {undefined_record, person} 等异常。
我应该使用哪种方法?我该如何解决这些问题?还是应该使用其他方法?
谢谢。
【问题讨论】:
-
记录是编译时构造,您不能在运行时动态使用。基本上在编译时所有的记录都被转换成看起来像 {person, "jack", 21} 的元组。由此,运行时无法确定您在说 Item#Table.Field 时所要求的内容。有关记录的更多详细信息,请参阅erlang.org/doc/reference_manual/records.html。