mirror of
https://github.com/mlua-rs/mlua
synced 2026-06-08 16:05:43 +00:00
91 lines
4.0 KiB
Plaintext
91 lines
4.0 KiB
Plaintext
error[E0596]: cannot borrow `s` as mutable, as it is a captured variable in a `Fn` closure
|
|
--> tests/compile/async_any_userdata_method.rs:9:49
|
|
|
|
|
8 | let mut s = &s;
|
|
| ----- `s` declared here, outside the closure
|
|
9 | reg.add_async_method("t", |_, this, ()| async {
|
|
| ------------- ^^^^^ cannot borrow as mutable
|
|
| |
|
|
| in this closure
|
|
10 | s = &*this;
|
|
| - mutable borrow occurs due to use of `s` in closure
|
|
|
|
error[E0373]: async block may outlive the current function, but it borrows `this`, which is owned by the current function
|
|
--> tests/compile/async_any_userdata_method.rs:9:49
|
|
|
|
|
9 | reg.add_async_method("t", |_, this, ()| async {
|
|
| ^^^^^ may outlive borrowed value `this`
|
|
10 | s = &*this;
|
|
| ---- `this` is borrowed here
|
|
|
|
|
note: async block is returned here
|
|
--> tests/compile/async_any_userdata_method.rs:9:49
|
|
|
|
|
9 | reg.add_async_method("t", |_, this, ()| async {
|
|
| _________________________________________________^
|
|
10 | | s = &*this;
|
|
11 | | Ok(())
|
|
12 | | });
|
|
| |_________^
|
|
help: to force the async block to take ownership of `this` (and any other referenced variables), use the `move` keyword
|
|
|
|
|
9 | reg.add_async_method("t", |_, this, ()| async move {
|
|
| ++++
|
|
|
|
error: lifetime may not live long enough
|
|
--> tests/compile/async_any_userdata_method.rs:9:49
|
|
|
|
|
9 | reg.add_async_method("t", |_, this, ()| async {
|
|
| ___________________________________-------------_^
|
|
| | | |
|
|
| | | return type of closure `{async block@$DIR/tests/compile/async_any_userdata_method.rs:9:49: 9:54}` contains a lifetime `'2`
|
|
| | lifetime `'1` represents this closure's body
|
|
10 | | s = &*this;
|
|
11 | | Ok(())
|
|
12 | | });
|
|
| |_________^ returning this value requires that `'1` must outlive `'2`
|
|
|
|
|
= note: closure implements `Fn`, so references to captured variables can't escape the closure
|
|
|
|
error[E0597]: `s` does not live long enough
|
|
--> tests/compile/async_any_userdata_method.rs:8:21
|
|
|
|
|
7 | let s = String::new();
|
|
| - binding `s` declared here
|
|
8 | let mut s = &s;
|
|
| ^^ borrowed value does not live long enough
|
|
9 | / reg.add_async_method("t", |_, this, ()| async {
|
|
10 | | s = &*this;
|
|
11 | | Ok(())
|
|
12 | | });
|
|
| |__________- argument requires that `s` is borrowed for `'static`
|
|
13 | })
|
|
| - `s` dropped here while still borrowed
|
|
|
|
|
note: requirement that the value outlives `'static` introduced here
|
|
--> src/userdata.rs
|
|
|
|
|
| M: Fn(Lua, UserDataRef<T>, A) -> MR + MaybeSend + 'static,
|
|
| ^^^^^^^
|
|
|
|
error[E0373]: closure may outlive the current function, but it borrows `s`, which is owned by the current function
|
|
--> tests/compile/async_any_userdata_method.rs:9:35
|
|
|
|
|
9 | reg.add_async_method("t", |_, this, ()| async {
|
|
| ^^^^^^^^^^^^^ may outlive borrowed value `s`
|
|
10 | s = &*this;
|
|
| - `s` is borrowed here
|
|
|
|
|
note: function requires argument type to outlive `'static`
|
|
--> tests/compile/async_any_userdata_method.rs:9:9
|
|
|
|
|
9 | / reg.add_async_method("t", |_, this, ()| async {
|
|
10 | | s = &*this;
|
|
11 | | Ok(())
|
|
12 | | });
|
|
| |__________^
|
|
help: to force the closure to take ownership of `s` (and any other referenced variables), use the `move` keyword
|
|
|
|
|
9 | reg.add_async_method("t", move |_, this, ()| async {
|
|
| ++++
|