LINUX.ORG.RU

История изменений

Исправление DarkEld3r, (текущая версия) :

В Haskell, например, всё гораздо сложнее. Там объединение типов невозможно.

Pазве как-то так сделать нельзя?

data Data = IntData Int | StringData String

Или речь о том, что не получится неявно приводить Int к Data? Не уверен, что это прям плохо.

Если брать раст, то там время жизни в типе. Например, как решить

Смотря, что нужно. Если вектор больше не нужен, то можно от дать его в поток. Если нужен доступ из разных потоков, то естественно нужно использовать механизмы синхронизации. Ну а если вдруг действительно нужно передать ссылку в поток и дождаться выполнения, то и это можно:

fn main() {
    let v = vec![1, 2, 3];

    thread::scope(|s| {
        s.spawn(|_| {
            println!("Here's a vector: {:?}", v);
        });
    })
    .unwrap();
    drop(v);
}

Исходная версия DarkEld3r, :

В Haskell, например, всё гораздо сложнее. Там объединение типов невозможно.

Pазве как-то так сделать нельзя?

data Data = IntData Int | StringData String

Или речь о том, что не получится неявно приводить Int к Data? Не уверен, что это плохо.

Если брать раст, то там время жизни в типе. Например, как решить

Смотря, что нужно. Если вектор больше не нужен, то можно от дать его в поток. Если нужен доступ из разных потоков, то естественно нужно использовать механизмы синхронизации. Ну а если вдруг действительно нужно передать ссылку в поток и дождаться выполнения, то и это можно:

fn main() {
    let v = vec![1, 2, 3];

    thread::scope(|s| {
        s.spawn(|_| {
            println!("Here's a vector: {:?}", v);
        });
    })
    .unwrap();
    drop(v);
}