fork download
  1.  
  2. #[derive(Debug)]
  3. struct Hoge {
  4. id: usize,
  5. ok: bool,
  6. }
  7.  
  8. impl Drop for Hoge {
  9. fn drop(&mut self) {
  10. assert!(self.ok, "must call .ok() (id: {})", self.id);
  11. }
  12. }
  13.  
  14. impl Hoge {
  15. fn new(id: usize) -> Self {
  16. Self{ id, ok: false }
  17. }
  18. fn next(mut self, check: i32) -> Result<Self,()> {
  19. self.ok = true;
  20. if check < 10 {
  21. Ok(Self{id: self.id, ok: false})
  22. } else {
  23. Err(())
  24. }
  25. }
  26. fn ok(mut self, check: i32) -> Result<(),()> {
  27. self.ok = true;
  28. if check < 10 {
  29. Ok(())
  30. } else {
  31. Err(())
  32. }
  33. }
  34. }
  35.  
  36. fn main() {
  37. run().unwrap();
  38. }
  39.  
  40. fn run() -> Result<(),()> {
  41. let h0 = Hoge::new(0);
  42. let h1 = Hoge::new(1);
  43. let h2 = Hoge::new(3);
  44. let h3 = Hoge::new(4);
  45.  
  46. h0.next(3)?;
  47. h1.next(4)?.next(9)?.ok(3)?;
  48. h2.next(10)?.next(4)?.ok(3)?;
  49. h3.ok(4)?;
  50.  
  51. Ok(())
  52.  
  53. }
Runtime error #stdin #stdout #stderr 0.02s 9776KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
thread 'main' panicked at 'must call .ok() (id: 0)', prog.rs:10:9
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
thread 'main' panicked at 'must call .ok() (id: 4)', prog.rs:10:9
stack backtrace:
   0:     0x5627bcb22553 - std::sys::unix::backtrace::tracing::imp::unwind_backtrace::hf8722b0178fb1b63
                               at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:39
   1:     0x5627bcb1e4b8 - std::sys_common::backtrace::_print::hc40139e5f1d656ee
                               at src/libstd/sys_common/backtrace.rs:70
   2:     0x5627bcb214f2 - std::panicking::default_hook::{{closure}}::h993d43465919c16a
                               at src/libstd/sys_common/backtrace.rs:58
                               at src/libstd/panicking.rs:200
   3:     0x5627bcb21264 - std::panicking::default_hook::h73d2c2ec3d9ba5a4
                               at src/libstd/panicking.rs:215
   4:     0x5627bcb21b50 - std::panicking::rust_panic_with_hook::h744417edfe714d72
                               at src/libstd/panicking.rs:478
   5:     0x5627bcb216d1 - std::panicking::continue_panic_fmt::h3557b3c3fa21b47b
                               at src/libstd/panicking.rs:385
   6:     0x5627bcb2161e - std::panicking::begin_panic_fmt::h376894437226fc7c
                               at src/libstd/panicking.rs:340
   7:     0x5627bcb1932e - core::ptr::real_drop_in_place::hc7f36aae628781b7
   8:     0x5627bcb19415 - prog::main::h25540fd5239600ef
   9:     0x5627bcb19472 - std::rt::lang_start::{{closure}}::h7f3b7cdae0a89733
  10:     0x5627bcb215a2 - std::panicking::try::do_call::h7a0381557c6c2cee
                               at src/libstd/rt.rs:49
                               at src/libstd/panicking.rs:297
  11:     0x5627bcb234a9 - __rust_maybe_catch_panic
                               at src/libpanic_unwind/lib.rs:92
  12:     0x5627bcb220a5 - std::rt::lang_start_internal::he0d8d06abc6f912f
                               at src/libstd/panicking.rs:276
                               at src/libstd/panic.rs:388
                               at src/libstd/rt.rs:48
  13:     0x5627bcb19461 - main
  14:     0x1524ec9afb6a - __libc_start_main
  15:     0x5627bcb19179 - _start
  16:                0x0 - <unknown>
thread panicked while panicking. aborting.