Size: a a a

2020 December 17

АМ

Александр Мещеряков... in Rust Beginners
@Francesco_Bernoulli А что делает этот код?
источник

MB

Mikail Bagishov in Rust Beginners
Егор
тут это гарантировано
Точно гарантированно?
Из заголовка цикла это не следует.
источник

Е

Егор in Rust Beginners
Александр Мещеряков
@Francesco_Bernoulli А что делает этот код?
источник

АМ

Александр Мещеряков... in Rust Beginners
Ага, так и понял. Мне он тоже нужен )
источник

АМ

Александр Мещеряков... in Rust Beginners
Это собственная реализация или переписано у кого?
источник

MB

Mikail Bagishov in Rust Beginners
Mikail Bagishov
Точно гарантированно?
Из заголовка цикла это не следует.
Тогда надо заголовок сменить на while j > 0
источник

АМ

Александр Мещеряков... in Rust Beginners
А почему бы просто не использовать usize вместо isize, раз гарантированно?
источник

АМ

Александр Мещеряков... in Rust Beginners
Kitsu
Видимо в первом случае срабатывает lifetime extension, а во втором нет
А есть какая-нибудь официальная бумага, где можно почитать, как работает lifetime extension?
источник

K

Kitsu in Rust Beginners
Александр Мещеряков
А есть какая-нибудь официальная бумага, где можно почитать, как работает lifetime extension?
Я тут пока искал на рефернсе инфу понял в чем настоящая причина. На счет lifetime extension не уверен, что  он вообще существует.
Настоящая причина кажется что именно в макросе, т.к там внутри скоупа по факту создается строка, пушится в вектор и далее этот вектор возвращается из скоупа (а строка умирает)
источник

K

Kitsu in Rust Beginners
для второго кейса код примерно такой (на самом деле нет, но по смыслу похож):

let b = {
   let mut v = Vec::new();
   let s = format!("hello");
   v.push(&s);
   v
};
println!("{:?}", b);
источник

АМ

Александр Мещеряков... in Rust Beginners
Там вот во что макрос разворачивается:
<[_]>::into_vec(Box::new([&format!("hello")]))
источник

K

Kitsu in Rust Beginners
там box [...], это немного другое
источник

K

Kitsu in Rust Beginners
гм, хотя с Box::new та же самая ошибка
источник

K

Kitsu in Rust Beginners
Александр Мещеряков
А есть какая-нибудь официальная бумага, где можно почитать, как работает lifetime extension?
Вот рфц про lifetime extension, а термин я отсюда позаимствовал. Правда после скима обоих рфц, как-то ситуация не особо яснее становится
источник
2020 December 18

a

antuan in Rust Beginners
есть стандартные аналоги такой функции?
pub fn empty_string_as_option(value: &str) -> Option<String> {
   match value.len() {
       0 => None,
       _ => Some(value.to_string()),
   }
}
источник

EG

Emmanuel Goldstein in Rust Beginners
antuan
есть стандартные аналоги такой функции?
pub fn empty_string_as_option(value: &str) -> Option<String> {
   match value.len() {
       0 => None,
       _ => Some(value.to_string()),
   }
}
Не думаю
источник

MB

Mikail Bagishov in Rust Beginners
Some(value).filter(|s|!s.empty())
источник

a

antuan in Rust Beginners
Mikail Bagishov
Some(value).filter(|s|!s.empty())
благодарю
источник

a

antuan in Rust Beginners
Mikail Bagishov
Some(value).filter(|s|!s.empty())
если быть точным:
Some(value).filter(|s| !s.is_empty()).map(|s|s.to_string())
источник

EG

Emmanuel Goldstein in Rust Beginners
antuan
если быть точным:
Some(value).filter(|s| !s.is_empty()).map(|s|s.to_string())
pub fn empty_string_as_option(value: &str) -> Option<String> {
   match value {
       "" => None,
       s => Some(s.to_string()),
   }
}

Это читабельней, чем этот фильтермап, имхо
источник