Comments 10
С другой стороны, у него слишком много поверхностных суждений, и информацию приходится искать самому.
+1, таких поверхностных статей в англоязычном сегменте выше крыши, к сожалению.
Долго не мог определиться с выбором материала для первой публикации на хабре, вот и взялся за этот цикл. Потом правда подвернулась неплохая (как мне кажется) статья про сишные объединения. В итоге этот перевод превратился в чемодан без ручки — всё время казалось, что "дальше будет интереснее", а потом было жалко бросать начатое.
В общем, обещаю не тащить это больше на хабр, тем более, что This Week in Rust регулярно подкидывает что-то интересное.
Можно попробовать, тем более, что даже на The Rust FFI Omnibus про Swift ничего нет.
Только не в англоязычном сегменте, а везде.
Вы не можете смешивать использование разных типов ключей, как это разрешается в Python...
Да все можно в Rust:
use std::collections::HashMap;
#[derive(Eq, PartialEq, Hash, Debug)]
enum Key {
X(i32),
Y(&'static str),
}
fn main() {
let mut a = HashMap::new();
a.insert(Key::X(1), 1);
a.insert(Key::Y("ta-da!"), 2);
assert_eq!( a[&Key::X(1)], 1 );
assert_eq!( a[&Key::Y("ta-da!")], 2 );
println!("{:?}", a);
}
Можно запустить
Дык, тип ключа будет всё равно один — "Key". (:
Так я не говорю, что это плохо или недостаточно, скорее "обычно". В С++ можно в какой-нибудь variant завернуть и получить такое же поведение.
Впрочем, подозреваю, что в Python, на который ссылается автор, происходит примерно такое же, с поправкой на динамическую типизацию.
Динамическая типизация (python, c++ any) != алгебраический тип (enum в rust, c++ variant).
Rust и Swift (третья, четвёртая, пятая и шестая части)