Заставить заработать этот кусок потребовалось около получаса. Я все еще не понимаю разницы.
#[derive(Debug)]
struct Person {
name : String
}
fn main() {
let name = String::from("Alice");
let alice = Person { name };
let bob = Person { name: "Bob".to_string() };
for person in [alice, bob] {
println!("Hello, {:?}!", person);
}
let name = "Mary";
println!("Hello, {}!", name);
}
Для сравнения код на F#:
type Person = { name : string }
let name = "Alice"
let alice = { name = name }
let bob = { name = "Bob" }
for e in [alice; bob ] do printfn "Hello, %A!" e
let name = "Mary"
printfn "hello, %s!" name
3 разных способа задать строковое значение. не многовато?
Впечатление от компилятора раста неплохие, в каждом месте подробное описание с подсказками, что можно сделать, не очень правда удачные.
например если в массиве поставить точку с запятой, то он предлагает боба пометить const,
помечаю , тогда он начинает верещать что bob надо заменить на bob : Person =. Зачем если тип справа определен?
Весело. Но если внимательно читать и постепенно исправлять то в конце концов собирается.
Смешанные чувства, то ли раст это одна большая бага, то ли фича