Size: a a a

2018 May 16

Oℕ

Oleg ℕizhnik in Rust Beginners
Artem
Всем привет, время глупых вопросов (1 день учу раст). Я совсем не понимаю как работает borrow checker (или что за это ответственно?)

Конкретно, вот этот кот работает:


fn router() -> Router {
   let mut router = Router::new();

   router
       .get("/", get_form, "index")
       .post("/gcd", post_form, "calculate");

   router
}


А вот этот нет

fn router() -> Router {
   *Router::new()
       .get("/", get_form, "index")
       .post("/gcd", post_form, "calculate")
}

Пишет  “cannot move out of borrowed content”.  Что-то подсказывает, что это возможно как-то связано с временными переменными. Может, они не доживают или что. 🙁

Короче, вопрос в том почему это происходит.
Router, как я понимаю, не реализует Copy, поэтому представим, что ты мог бы превращать &mut Router в Router, тогда после каждой операции post get ты бы мог дорисывать звёздочку и получать то ли нелегальную копию то ли ещё раз тот же Router в ещё одно владение
источник

Oℕ

Oleg ℕizhnik in Rust Beginners
Artem
Ок, становится яснее. Как более идиоматично написать подобный код? Вводить локальную переменную, потом использовать её как return value?
Я не профи, но первый вариант мне выглядит вполне идиоматичным
источник

A

Artem in Rust Beginners
Спасибо!
источник

Oℕ

Oleg ℕizhnik in Rust Beginners
Artem
Ок, становится яснее. Как более идиоматично написать подобный код? Вводить локальную переменную, потом использовать её как return value?
С другой стороны можно было бы реализовать так же какой-то свой кастомный тип, где Router - одно из полей, а инициализация - часть new
источник
2018 May 20

D

Denis in Rust Beginners
https://t.me/rustlang_ru/124022

народу тут и правда не много, зато как мне кажется бОльшая часть — не новички =)
ну и плюс тут более охотно отвечают на простые вопросы
источник

A

Anton 📦 ᯌ in Rust Beginners
как ни странно
источник

A

Anton 📦 ᯌ in Rust Beginners
только в расточатах чаты имеют свою ценность и общаются там на темы, созданные для этого чата
источник

RB

Rustem B. in Rust Beginners
и на языке эльфов
источник

ЕИ

Евгений Иванов in Rust Beginners
Рустем Рустем.
источник

RB

Rustem B. in Rust Beginners
*меня нет...*
источник

ЕИ

Евгений Иванов in Rust Beginners
Дроф, это ты?
источник

ЕИ

Евгений Иванов in Rust Beginners
@droff здарова!
источник

ЕИ

Евгений Иванов in Rust Beginners
Решил Раст попробовать?
источник

DD

Droff Droffovich in Rust Beginners
Привет!
источник

AM

Alexander Maslov in Rust Beginners
хм, какая-то странная штука:

error[E0599]: no variant named `NotFound` found for type `exonum::api::ApiError` in the current scope
  --> tests/api.rs:104:30
   |
104 |         assert_matches!(err, ApiError::NotFound("Wallet not found"))
   |                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ variant not found in `exonum::api::ApiError`


При этом в tests/api.rs есть:

us
e exonum::api::{Api, ApiError};

И что самое главное:

$ cat exonum/src/api/mod.rs | grep "pub enum ApiError" -A 15
pub enum ApiError {
   /// Storage error.
   #[fail(display = "Storage error: {}", _0)]
   Storage(#[cause] storage::Error),

   /// Input/output error.
   #[fail(display = "IO error: {}", _0)]
   Io(#[cause] ::std::io::Error),

   /// Bad request.
   #[fail(display = "Bad request: {}", _0)]
   BadRequest(String),

   /// Not found.
   #[fail(display = "Not found: {}", _0)]
   NotFound(String),
источник

AM

Alexander Maslov in Rust Beginners
как такое может быть?
источник

м

мухожук in Rust Beginners
Alexander Maslov
хм, какая-то странная штука:

error[E0599]: no variant named `NotFound` found for type `exonum::api::ApiError` in the current scope
  --> tests/api.rs:104:30
   |
104 |         assert_matches!(err, ApiError::NotFound("Wallet not found"))
   |                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ variant not found in `exonum::api::ApiError`


При этом в tests/api.rs есть:

us
e exonum::api::{Api, ApiError};

И что самое главное:

$ cat exonum/src/api/mod.rs | grep "pub enum ApiError" -A 15
pub enum ApiError {
   /// Storage error.
   #[fail(display = "Storage error: {}", _0)]
   Storage(#[cause] storage::Error),

   /// Input/output error.
   #[fail(display = "IO error: {}", _0)]
   Io(#[cause] ::std::io::Error),

   /// Bad request.
   #[fail(display = "Bad request: {}", _0)]
   BadRequest(String),

   /// Not found.
   #[fail(display = "Not found: {}", _0)]
   NotFound(String),
не совпадение версий?
источник

AL

Andrey @ozkriff Lesnikov in Rust Beginners
версии используемой cargo зависимости и того где ты исходники смотришь 100% совпадают?
источник

AM

Alexander Maslov in Rust Beginners
хмм
источник

AM

Alexander Maslov in Rust Beginners
блин
источник