Size: a a a

2020 December 23

y

ymdev in Rust Beginners
Kitsu
конкретно для этого случая еще будет работать fn a(func: fn()) { .. }
а fn не только для функций?
источник

y

ymdev in Rust Beginners
замыкания тоже берет?
источник

MB

Mikail Bagishov in Rust Beginners
ymdev
а fn не только для функций?
Замыкание, которое ничего не захватывает, также кастуется в fn
источник

J

JohnByte in Rust Beginners
ymdev
У меня вопрос, а почему при float нельзя сравнивать с нулем? Я что-то не слышал, про такие приколы. Знаю там что 0.1 + 0.2 = 0.30000000000000004
А чего с нулем не так?
Потому что точность не бесконечная. А некоторые десятичные дроби (как 0.1 и 0.2) не имеют конечного представления в двоичной системе
источник

y

ymdev in Rust Beginners
У меня просто есть пример https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f9a1e23e2516d903bf5c6dbf679d2d7d

Который отхватывает ошибку
error[E0621]: explicit lifetime required in the type of `window`
 --> src/main.rs:43:8
  |
41 | fn add_menu_actions(app: &gtk::Application, window: &gtk::ApplicationWindow) {
  |                                                     ----------------------- help: add explicit lifetime `'static` to the type of `window`: `&'static ApplicationWindow`
42 |     let about = gio::SimpleAction::new("about", None);
43 |     about.connect_activate(|_, _| {
  |           ^^^^^^^^^^^^^^^^ lifetime `'static` required

error: aborting due to previous error

Я природу этой ошибки не понимаю, так как я пробовал сделать простой вариант в надежде воспроизвести ошибку https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=5bf28674d5aad8bbf43b960dd24a6fdc
А он, как назло, работает)

Объясните, пожалуйста, че ему не нравится.

Если что в Cargo.toml зависимости (если захотите вопроизвести)
[dependencies.gtk]
version = "0.9.0"
features = ["v3_16"]

[dependencies.gio]
version = ""
features = ["v2_44"]
источник

K

Kitsu in Rust Beginners
ymdev
У меня просто есть пример https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f9a1e23e2516d903bf5c6dbf679d2d7d

Который отхватывает ошибку
error[E0621]: explicit lifetime required in the type of `window`
 --> src/main.rs:43:8
  |
41 | fn add_menu_actions(app: &gtk::Application, window: &gtk::ApplicationWindow) {
  |                                                     ----------------------- help: add explicit lifetime `'static` to the type of `window`: `&'static ApplicationWindow`
42 |     let about = gio::SimpleAction::new("about", None);
43 |     about.connect_activate(|_, _| {
  |           ^^^^^^^^^^^^^^^^ lifetime `'static` required

error: aborting due to previous error

Я природу этой ошибки не понимаю, так как я пробовал сделать простой вариант в надежде воспроизвести ошибку https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=5bf28674d5aad8bbf43b960dd24a6fdc
А он, как назло, работает)

Объясните, пожалуйста, че ему не нравится.

Если что в Cargo.toml зависимости (если захотите вопроизвести)
[dependencies.gtk]
version = "0.9.0"
features = ["v3_16"]

[dependencies.gio]
version = ""
features = ["v2_44"]
можно воспроизвести поменяв функцию соответственно на fn connect_activate<T: Fn() + 'static>( ... )
источник

y

ymdev in Rust Beginners
Kitsu
можно воспроизвести поменяв функцию соответственно на fn connect_activate<T: Fn() + 'static>( ... )
и что с этим счастьем потом делать? Я пробовал для window выствить 'static, но это за собой повело череду ошибок еще в миллионе мест
Если посмотреть готовые примеры, то там вообще что-то невообразимое для меня происходит https://github.com/gtk-rs/gtk-rs/blob/master/examples/src/bin/menu_bar_system.rs#L49
источник

K

Kitsu in Rust Beginners
ymdev
и что с этим счастьем потом делать? Я пробовал для window выствить 'static, но это за собой повело череду ошибок еще в миллионе мест
Если посмотреть готовые примеры, то там вообще что-то невообразимое для меня происходит https://github.com/gtk-rs/gtk-rs/blob/master/examples/src/bin/menu_bar_system.rs#L49
https://github.com/pretzelhammer/rust-blog/blob/master/posts/common-rust-lifetime-misconceptions.md#2-if-t-static-then-t-must-be-valid-for-the-entire-program
Почитай вот это, должно стать понятнее.
В плейграунде достаточно объявить кложу с move || .. и аргумент указать как window: &'static str.
источник

K

Kitsu in Rust Beginners
В реальном коде, вероятно придется делать также, как в примере из gtk-rs
источник

V

V---V in Rust Beginners
expect от unwrap отличается только тем, что в него можно передать сообщение?
источник

S

Sergey in Rust Beginners
V---V
expect от unwrap отличается только тем, что в него можно передать сообщение?
Ага
источник

a

antuan in Rust Beginners
Что делать, если очень хочется мувнутое размувить обратно? Помимо clone, copy, arc и референсов
источник

K

Kitsu in Rust Beginners
antuan
Что делать, если очень хочется мувнутое размувить обратно? Помимо clone, copy, arc и референсов
Мувни ещё раз
источник

a

antuan in Rust Beginners
Kitsu
Мувни ещё раз
Это как?
источник

K

Kitsu in Rust Beginners
Давай вернёмся к оригинальному вопросу, что ты подразумеваешь под"мувнутое размувить обратно"?
источник

a

antuan in Rust Beginners
Улетело что-то в функцию. Не референс. Хочу мувнутое значение пользовать после вызова этой функции
fn bar(i: i32) {}

fn baz(i: i32){}

fn foo() {
let x = 1;
bar(x);
baz(x);
}
источник

MB

Mikail Bagishov in Rust Beginners
В том примере, который ты привел, i32: Copy, поэтому мува не происходит.

А в общем случае ты хочешь странного - когда функция вернула управление, переданное ей значение скорее всего уже мертво
источник

MB

Mikail Bagishov in Rust Beginners
Скажем, ты передал функции Vec<u32>, потом он в скоупе этой функции умер, память была освобождена, и теперь ей уже даже может кто-то другой владеть
источник

a

antuan in Rust Beginners
Ладно, да, не очень подходящий пример. На самом деле у меня структура. Первая функция может либо вызвать mpsc::Sender.send сделать, либо нет, в зависимости от условий.
Мне не очень хочется делать clone, т.к. если send внутри был вызван, то и использованное значение я больше юзать не буду. А если все-таки в канал объект не ушёл в канал, то я его еще некоторое время снаружи помучаю.
источник

MB

Mikail Bagishov in Rust Beginners
То есть есть функция, которая при некотором условии забирает владение а при другом нет?
источник