gpt4 book ai didi

rust - 为什么不允许在格式中重复使用相同的值!宏观

转载 作者:行者123 更新时间:2023-11-29 07:45:47 28 4
gpt4 key购买 nike

给定:

fn main() {
println!("{0} {0:?}", 10);
}

我得到:

main.rs:2:27: 2:29 error: argument redeclared with type `?` when it was previously ``
main.rs:2 println!("{0} {1:?}", 10);
^~
error: aborting due to previous error

我被迫做:

println!("{0} {1:?}", 10, 10);
// OR
println!("{} {:?}", 10, 10);

为什么要对我施加这样的限制?

最佳答案

这是由于格式化系统的限制。

在内部,println!(更准确地说,format_args!)将其参数打包到一个数组中,将每个参数与其格式类型配对。例如,下面的表达式:

println!("{2} {0:?} {1:x}", 1, 2, 3);

产生这个参数数组:

match (&1, &2, &3) {
(__arg0, __arg1, __arg2) => [
::std::fmt::argument(::std::fmt::Debug::fmt, __arg0),
::std::fmt::argument(::std::fmt::LowerHex::fmt, __arg1),
::std::fmt::argument(::std::fmt::Display::fmt, __arg2)
]
}

(顺便说一句,你可以使用 rustc -Z unstable-options --pretty=expanded main.rs 看到完整的扩展)

这解释了为什么您的示例不起作用:如果您希望第一个参数 (__arg0) both DebugDisplay,那第二个type放在哪里呢?

没有办法在不使系统过于复杂的情况下解除此限制,所以遗憾的是我们只能解决它。

关于rust - 为什么不允许在格式中重复使用相同的值!宏观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27929560/

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