docs: explain match assertions and annotation type distinctions

This commit is contained in:
2026-11-15 19:14:55 +08:00
parent 903b3bbf9d
commit 57cd32eb5c
16 changed files with 58 additions and 6 deletions
+4
View File
@@ -164,6 +164,7 @@ fn explicit_references_control_lifetime_and_copies_are_borrowed() {
vm.release(owned).unwrap();
assert_eq!(drops.load(Ordering::SeqCst), 1);
assert_eq!(vm.object_count(), 0);
// 最后拥有根释放后,复制来的借用句柄必须失效,不能当作额外拥有根。
assert!(matches!(vm.object(borrowed), Err(VmError::InvalidHandle)));
assert_eq!(vm.release(borrowed), Err(VmError::InvalidHandle));
}
@@ -210,6 +211,7 @@ fn replacing_the_same_edge_does_not_destroy_the_target() {
assert_eq!(vm.ref_count(target).unwrap(), 1);
vm.set_attr(owner, "child", Value::Number(7_i64.into()))
.unwrap();
// 属性从对象改为数值会归还原目标最后的边,因此旧 target 句柄应失效。
assert!(matches!(vm.object(target), Err(VmError::InvalidHandle)));
assert_eq!(
vm.get_attr(owner, "child").unwrap(),
@@ -350,7 +352,9 @@ fn cycles_remain_while_rooted_and_are_collected_when_unreachable() {
assert_eq!(vm.collect_cycles(), 2);
assert_eq!(vm.collect_cycles(), 0);
assert_eq!(drops.load(Ordering::SeqCst), 2);
// 无根环回收后第一个旧句柄失效,不能只依赖析构计数判断槽是否仍可访问。
assert!(matches!(vm.object(first), Err(VmError::InvalidHandle)));
// 同一垃圾环中的第二个对象也必须失效,避免只回收部分环。
assert!(matches!(vm.object(second), Err(VmError::InvalidHandle)));
}