我有很多不同范围的数据集,我需要插入到表中.红豆杉是过度杀戮,只是为了寻找亲吻.如中所示

//format!("<tr><td>{e1}</td><td>{e2}</td></tr>") – no good, might be exprs
format!("<tr><td>{}</td><td>{}</td></tr>", e1, e2)

我想为任意数量的列简化这一过程

macro_rules! tr {
    ($($td:expr),*) => {
        format!(concat!("<tr>", $("<td>{}</td>"),* "</tr>"), $($td),*)
    }
}
tr!(e1, e2)

出现错误:try 重复一个表达式,该表达式不包含与在此深度重复匹配的语法变量

所以我try 了一个人工代码块,只是为了在第一次重复中给它变量

macro_rules! tr {
    ($($td:expr),*) => {
        format!(concat!("<tr>", $({ $td; "<td>{}</td>" }),* "</tr>"), $($td),*)
    }
}

提供错误:预期令牌:,

正确的语法是什么?

推荐答案

当您需要重复某个表达式与元变量相同的次数,但没有将其包括在表达式中时,有一个诀窍:定义一个内部宏ARM/另一个接受元变量并生成常量表达式的内部宏.这样,您就可以在检索中"使用"元变量,而不需要实际包括它:

macro_rules! tr {
    (@trick $td:expr) => { "<td>{}</td>" };
    ($($td:expr),*) => {
        format!(concat!("<tr>", $(tr!(@trick $td),)* "</tr>"), $($td),*)
    }
}

在晚上,有一个更简单的方法:使用${ignore(...)}修饰符,这正是为了做到这一点:

#![feature(macro_metavar_expr)]

macro_rules! tr {
    ($($td:expr),*) => {
        format!(concat!("<tr>", $("<td>{}</td>", ${ignore(td)})* "</tr>"), $($td),*)
    }
}

Html相关问答推荐

我需要主页按钮出现在中间

如何阻止Chromecast图标出现在HTML5视频

Angular /HTML5不会播放本地文件夹中的音频mpeg

获得一个css框,以便在页面太小时不再粘在页面的角落.

为什么我的网页底部是蓝色背景而不是渐变色?

默认情况下使用Disbale Scroll,但在单击图标后将其激活

从html文件中提取元素的Python BeautifulSoup

列表项文本在占据剩余空间之前在标记下换行

悬停表格单元格文本时,使元素的字体大小更大,同时保持表格单元格的高度不变

为什么我不能覆盖 div 的样式?

太多的 Web 视图实例导致手机过热 Swift

当浏览器宽度减小时字体大小变得太大

在 HTML 视频上环绕文本叠加

用由文本制成的边框包围内容

如何垂直平移一个元素,使其新位置位于另外两个元素之间?

CSS 网格跨度行到所有行

将图像高度调整到容器 div 中而不使其高度增加

父背景仅在子元素中可见

在 SQL 中合并 HTML 表中的单元格

如何让 Reindeer 居中