gpt4 book ai didi

rust - 提取字符串中的宏参数

转载 作者:行者123 更新时间:2023-12-03 11:34:56 25 4
gpt4 key购买 nike

我有以下宏:-

macro_rules! update_user {
($tx:ident, $id:expr, $key:expr, $val:expr) => {
sqlx::query!(
"UPDATE users SET
$key = ?
WHERE id = $id
"
, $val
).execute(&mut $tx).await?;

};
}
如何使此宏在字符串中使用$ id和$ key的值?我无法使用 format!,因为 query!期望仅字符串文字
编辑;连连看!宏无法正常工作

macro_rules! update {
($tx:ident, $col:tt, $val:expr, $id:expr) => {
if let Some(some) = $val {
sqlx::query!(
concat!(
"UPDATE users SET",
$col ," = ? ",
"where id = ? "
),
some, $id
).execute(&mut $tx).await?;
}
};
}

pub(crate) async fn update_user<'a> (
db : &MySqlPool,
user : User<'a>,
) -> RouteResult<()> {

let mut tx = db.begin().await?;

update!(tx, "uname", user.uname, user.id);

if let Some(uname) = user.uname {
sqlx::query!(
"UPDATE users SET
uname = ?
where id = ?
",
uname, user.id
).execute(&mut tx).await?;
}

tx.commit().await?;

Ok(())
}

这产生了 expected string literal错误。

最佳答案

您可能需要 concat!() 。它将连接文字以产生&'static str:

macro_rules! update_user {
($tx:ident, $id:expr, $key:expr, $val:expr) => {
sqlx::query!(
concat!("UPDATE users SET $key = ", $key, " WHERE id = ", $id),
$val
).execute(&mut $tx).await?;

};
}
类似的例子: Playground

关于rust - 提取字符串中的宏参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65140557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com