Rust 是否跟踪唯一的对象 ID,我们可以打印它们吗?
Does Rust track unique object ids and can we print them?
Rust 是否在幕后为每个对象使用某种实例 ID?如果是,是否可以使其可见?
考虑一下
struct SomeStruct;
fn main() {
let some_thing = SomeStruct;
println!("{:UniqueId}", some_thing);
let another = some_thing;
println!("{:UniqueId}", another);
}
我在这里使用了带有 {:UniqueId}
的伪格式字符串。在这种情况下,它可能打印
4711
4712
我知道 Rust 会进行按位复制,我想让它真正可见。如果我有这样一个实例 ID,我可以通过比较 ID 使其可见。
虽然可能有另一种方法可以达到同样的效果。
不,Rust 没有任何自动生成的对象 ID。这种功能会给每个用户带来一些开销,而 Rust 希望尽可能少地施加开销。其他一切都应该选择加入。
据我所知,一个项目的地址是唯一的,你可以得到:
struct SomeStruct;
fn main() {
let some_thing = SomeStruct;
println!("{:p}", &some_thing);
let another = some_thing;
println!("{:p}", &another);
}
0x7ffc020ba638
0x7ffc020ba698
Everything1 占用了 space 某处,因此您可以获得那个 space 的地址并打印它。
这在某些情况下可能也独特。例如,当您转移某项的所有权时,您可能希望 ID 保持不变。我认为在那种情况下,你必须自己动手。 。这样的方案不适用于您无法控制的对象。
1 — 好吧,几乎所有的东西。我知道 const
项不能保证有一个位置,这就是 static
项存在的原因。
Rust 是否在幕后为每个对象使用某种实例 ID?如果是,是否可以使其可见?
考虑一下
struct SomeStruct;
fn main() {
let some_thing = SomeStruct;
println!("{:UniqueId}", some_thing);
let another = some_thing;
println!("{:UniqueId}", another);
}
我在这里使用了带有 {:UniqueId}
的伪格式字符串。在这种情况下,它可能打印
4711
4712
我知道 Rust 会进行按位复制,我想让它真正可见。如果我有这样一个实例 ID,我可以通过比较 ID 使其可见。
虽然可能有另一种方法可以达到同样的效果。
不,Rust 没有任何自动生成的对象 ID。这种功能会给每个用户带来一些开销,而 Rust 希望尽可能少地施加开销。其他一切都应该选择加入。
据我所知,一个项目的地址是唯一的,你可以得到:
struct SomeStruct;
fn main() {
let some_thing = SomeStruct;
println!("{:p}", &some_thing);
let another = some_thing;
println!("{:p}", &another);
}
0x7ffc020ba638
0x7ffc020ba698
Everything1 占用了 space 某处,因此您可以获得那个 space 的地址并打印它。
这在某些情况下可能也独特。例如,当您转移某项的所有权时,您可能希望 ID 保持不变。我认为在那种情况下,你必须自己动手。
1 — 好吧,几乎所有的东西。我知道 const
项不能保证有一个位置,这就是 static
项存在的原因。