3 个不稳定版本
使用旧的 Rust 2015
0.2.1 | 2020 年 12 月 11 日 |
---|---|
0.2.0 | 2020 年 1 月 6 日 |
0.1.0 | 2017 年 11 月 2 日 |
#602 在 Rust 模式
5,785 每月下载量
17KB
386 行
可问责 RefCell
该包封装了标准库的 RefCell 类型,同时使其更容易处理动态借用失败。每个对单元格的不可变或可变借用都会记录执行借用的代码的堆栈跟踪,并在借用结束时销毁该记录。在动态借用失败的情况下(无论是尝试可变借用时存在未解决的不可变借用,还是存在未解决的可变借用时的不可变借用),如果存在 RUST_BACKTRACE 环境变量,则冲突的堆栈跟踪将打印到 stderr。
示例(尝试可变借用时存在两个未解决的不可变借用)
Outstanding borrows:
1: _$LT$accountable_refcell..RefCell$LT$T$GT$$GT$::borrow::h93de6dc5716214a2
2: accountable_refcell::tests::cannot_borrow_mutably_multi_borrow::hd9184755b4f98dae
3: _$LT$F$u20$as$u20$test..FnBox$LT$T$GT$$GT$::call_box::h30f93c5e44004cdd (.llvm.6B7221EB)
4: __rust_maybe_catch_panic
5: std::sys_common::backtrace::__rust_begin_short_backtrace::ha384908c78afca63
6: std::panicking::try::do_call::h7da6a9b8bfb2762c (.llvm.E1945E4B)
7: __rust_maybe_catch_panic
8: _$LT$F$u20$as$u20$alloc..boxed..FnBox$LT$A$GT$$GT$::call_box::hd53410bd165f5d82 (.llvm.B1C468B7)
9: std::sys::imp::thread::Thread::new::thread_start::hf16f292ea51f5fa0
10: _pthread_body
11: _pthread_start
1: _$LT$accountable_refcell..RefCell$LT$T$GT$$GT$::borrow::h93de6dc5716214a2
2: accountable_refcell::tests::cannot_borrow_mutably_multi_borrow::hd9184755b4f98dae
3: _$LT$F$u20$as$u20$test..FnBox$LT$T$GT$$GT$::call_box::h30f93c5e44004cdd (.llvm.6B7221EB)
4: __rust_maybe_catch_panic
5: std::sys_common::backtrace::__rust_begin_short_backtrace::ha384908c78afca63
6: std::panicking::try::do_call::h7da6a9b8bfb2762c (.llvm.E1945E4B)
7: __rust_maybe_catch_panic
8: _$LT$F$u20$as$u20$alloc..boxed..FnBox$LT$A$GT$$GT$::call_box::hd53410bd165f5d82 (.llvm.B1C468B7)
9: std::sys::imp::thread::Thread::new::thread_start::hf16f292ea51f5fa0
10: _pthread_body
11: _pthread_start
thread 'tests::cannot_borrow_mutably_multi_borrow' panicked at 'RefCell is already immutably borrowed.', src/lib.rs:170:12
该包的 RefCell 类型公共 API 与 std::cell::RefCell 的公共 API 相似。
依赖关系
~2.5–3.5MB
~72K SLoC