Macro nar_dev_utils::show
source · macro_rules! show { ($e:expr) => { ... }; ($e:expr;) => { ... }; ($($e:expr),+ $(,)?) => { ... }; ($($e:expr),+ $(,)?;) => { ... }; }
Expand description
§show!:复现Julia的@show
- 🎯复刻Julia中常用的宏
@show 表达式- 相当于Julia
@show(表达式),但功能更强大
- 相当于Julia
- 📌核心:打印
表达式 = 值,并(可选地)返回表达式的值- 🚩只有一个表达式⇒计算、打印并返回表达式的值
- 🚩多个表达式⇒计算、打印并返回表达式值的元组 | Julia则是返回最后一个值
- 🚩一个表达式+尾缀分号⇒计算并打印,不返回值
- 🚩多个表达式+尾缀分号⇒批量计算并打印,不返回任何值(并且无运行时损耗)
- ✅允许尾缀逗号
- 📝对于文档测试,必须自包名导入相应的宏以便进行测试
- 🔗亦可参考其它实现如show
§用例
use nar_dev_utils::show;
fn see<'a>(v: &'a str, v2: &'a str) -> (&'a str, &'a str) {
// 用`show!`打印`v`、`v2`,不返回值
show!(&v, &v2;);
// 用`show!`打印`v`,并返回其值
show!(v, v2)
}将被转换为
fn see<'a>(v: &'a str, v2: &'a str) -> (&'a str, &'a str) {
// 用`show!`打印`v`、`v2`,不返回值
println!("{} = {:?}", "&v", (&v));
println!("{} = {:?}", "&v2", (&v2));
// 用`show!`打印`v`,并返回其值
(
{
let value = v;
println!("{} = {:?}", "v", value);
value
},
{
let value = v2;
println!("{} = {:?}", "v2", value);
value
},
)
}调用see("我是一个值", "我是另一个值")将输出
&v = "我是一个值"
&v2 = "我是另一个值"
v = "我是一个值"
v2 = "我是另一个值"
并返回("我是一个值", "我是另一个值")