Size: a a a

2020 December 14

АК

Алексей Кравченко... in Rust Beginners
Друзья, есть быстрый "коробочный" способ проверит один вектор на вхождение в него другого вектора?

a = [1, 2, 3, 4]
b = [2, 3]

b in a == True
источник

Z

Zulqarnayn in Rust Beginners
Mikail Bagishov
winapi = {version = "...", features = ["a", "b", "c"]}
Если непонятно, что означает features в этой записи, то предлагаю почитать https://doc.rust-lang.org/stable/cargo/reference/features.html
спасибо. а по логике же должно быть просто. взял подключил и работает. ну ладно я сильно привык к шарпу.
источник

MB

Mikail Bagishov in Rust Beginners
Zulqarnayn
спасибо. а по логике же должно быть просто. взял подключил и работает. ну ладно я сильно привык к шарпу.
Смотри, ты действительно можешь активировать все фичи, тогда все, что видно в документации будет работать
источник

MB

Mikail Bagishov in Rust Beginners
Но просто winapi это длинное полотно кода, и компилятор будет долго его компилировать
источник

MB

Mikail Bagishov in Rust Beginners
Маленькие библиотеки обычно механизм фич не используют и всегда предоставляют весь свой функционал
источник

K

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

a = [1, 2, 3, 4]
b = [2, 3]

b in a == True
https://github.com/rust-lang/rust/issues/54961
стдлибой похоже никак
источник
2020 December 15

sn

steven nan in Rust Beginners
why isn't it using the cached entity?
источник

DO

Denis Otkydach in Rust Beginners
Алексей Кравченко
Друзья, есть быстрый "коробочный" способ проверит один вектор на вхождение в него другого вектора?

a = [1, 2, 3, 4]
b = [2, 3]

b in a == True
Если имеется ввиду подмножество, то b.iter().all(|a_item| a.contains(a_item))
источник

JM

John Meow in Rust Beginners
Denis Otkydach
Если имеется ввиду подмножество, то b.iter().all(|a_item| a.contains(a_item))
Думаю, имелось в виду, что существует такой n, что a.iter().skip(n).zip(b.iter()).all(|(i, j)| i == j)
источник

JM

John Meow in Rust Beginners
John Meow
Думаю, имелось в виду, что существует такой n, что a.iter().skip(n).zip(b.iter()).all(|(i, j)| i == j)
Иными словами, вектор b является "подстрокой" вектора a
источник

JM

John Meow in Rust Beginners
John Meow
Иными словами, вектор b является "подстрокой" вектора a
Обращаю внимание на то, что "подстрока" ≠ "подпоследовательность"
источник

С

Саша in Rust Beginners
есть фиксированный набор колонок и для каждой колонки функция, которая генерирует значение по своей логике

подскажите, как правильно написать, чтобы две функции (колонки x1 и x3) могли использовать один счетчик?

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=bad5abf42d96c85ea315ce79c7ce085e
источник

r

red75prime in Rust Beginners
Саша
есть фиксированный набор колонок и для каждой колонки функция, которая генерирует значение по своей логике

подскажите, как правильно написать, чтобы две функции (колонки x1 и x3) могли использовать один счетчик?

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=bad5abf42d96c85ea315ce79c7ce085e
А что с RefCell не получается?
источник

С

Саша in Rust Beginners
red75prime
А что с RefCell не получается?
у меня не получилось и я перестал копать в эту сторону
источник

r

red75prime in Rust Beginners
let i = RefCell::new(1);  и в замыкании let mut i = i.borrow_mut(); *i += 1; и т.д.
источник

r

red75prime in Rust Beginners
Если нужно менять значение в одном потоке из разных мест это всегда RefCell или Cell. В крайнем случае UnsafeSell или указатели.
источник

С

Саша in Rust Beginners
red75prime
let i = RefCell::new(1);  и в замыкании let mut i = i.borrow_mut(); *i += 1; и т.д.
о, спасиб, так заработало

я похоже пытался *i.borrow_mut() += 1
источник

AK

Andrey Kapitonov in Rust Beginners
Привет, нужен хелп

for (x, y, pixel) in diff.enumerate_pixels_mut() {
       let pixel_1 = liza_1.get_pixel(x, y);
       let pixel_2 = liza_2.get_pixel(x, y);

       if pixel_1 != pixel_2 {
           let delta: f64 = delta(pixel_1, pixel_2);

           if delta > MAX_DELTA {
               diff.put_pixel(x, y, Rgba([255, 0, 0, 255]));
               diff_pixels_counter += 1
           }
       } else {
           diff.put_pixel(x, y, *pixel_1)
       }
   }

Получаю ошибку:

error[E0499]: cannot borrow `diff` as mutable more than once at a time
 --> src\main.rs:65:13
  |
50 |     for (x, y, pixel) in diff.enumerate_pixels_mut() {
  |                          ---------------------------
  |                          |
  |                          first mutable borrow occurs here
  |                          first borrow later used here
...
65 |             diff.put_pixel(x, y, *pixel_1)
  |             ^^^^ second mutable borrow occurs here


как побороть это?
источник

𝕯𝖁

𝕯mitry 𝖁akulenko... in Rust Beginners
Сохранять в новый diff, может. По-другому - наверное никак. По-любому будет заимствование в первой строке.
источник

OS

Oleg Shirokov in Rust Beginners
Andrey Kapitonov
Привет, нужен хелп

for (x, y, pixel) in diff.enumerate_pixels_mut() {
       let pixel_1 = liza_1.get_pixel(x, y);
       let pixel_2 = liza_2.get_pixel(x, y);

       if pixel_1 != pixel_2 {
           let delta: f64 = delta(pixel_1, pixel_2);

           if delta > MAX_DELTA {
               diff.put_pixel(x, y, Rgba([255, 0, 0, 255]));
               diff_pixels_counter += 1
           }
       } else {
           diff.put_pixel(x, y, *pixel_1)
       }
   }

Получаю ошибку:

error[E0499]: cannot borrow `diff` as mutable more than once at a time
 --> src\main.rs:65:13
  |
50 |     for (x, y, pixel) in diff.enumerate_pixels_mut() {
  |                          ---------------------------
  |                          |
  |                          first mutable borrow occurs here
  |                          first borrow later used here
...
65 |             diff.put_pixel(x, y, *pixel_1)
  |             ^^^^ second mutable borrow occurs here


как побороть это?
Или enumerate делать по копии diff.
В общем-то подобный код и в C\C++ ничего хорошего бы не делал =)
источник