【发布时间】:2018-10-01 09:00:41
【问题描述】:
我有一个宏来生成matcharms:
macro_rules! sort_by {
( $query:ident, $sort_by:expr, { $( $name:pat => $column:path,)+ } ) => {
match $sort_by.column {
$(
$name => if $sort_by.descending {
$query = $query.order_by($column.desc());
} else {
$query = $query.order_by($column.asc());
},
)+
}
}
}
我想这样称呼它:
sort_by!(query, sort_by.unwrap_or(Sort::desc("id")), {
"id" => table::id,
"customerName" => table::customer_name,
});
但我收到一个错误:
sort_by!(query, &sort_by.unwrap_or(Sort::desc("id")), {
^^^^^^^ value moved here in previous iteration of loop
所以我必须这样称呼它:
let sort = sort_by.unwrap_or(Sort::desc("id"));
sort_by!(query, &sort, {
"id" => table::id,
"customerName" => table::customer_name,
});
我应该改变什么才能直接在宏调用中使用表达式?
【问题讨论】:
-
错误信息看起来像是在
loop中使用宏,这似乎是问题的根源。 -
第一个错误是:
failed to resolve. Use of undeclared type or module 'Sort'。我认为您的帖子中缺少代码。 play.rust-lang.org/…