[20190417]
fn main() {
let t = (1, 'a', false);
let f = (2, (1, 'a', false));
println!("{} {} {}", t.0, t.1, t.2);
println!("{}", f.1); // wrong
}
第二个会出错,因为是一个tuple
,{}
有很多语法细节,比如改成:{:?}
即可。
println!("{:?}", f.1); //(1, 'a', false)
因为没有匹配的display trait
,匹配上即可。
println!("{:?}", f); // (2, (1, 'a', false))
也可以。
下面这样会报错:
fn main() {
let t = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
println!("{:?}", t);
}
如果tuple只是1到6则不会出错。
WHY???
fn main() {
let xs: [i32; 5] = [4,5,6,7,8];
println!("{}", xs[0]);
}
注意数组类型的标定方法:let xs: [i32; 5]
第一个参数表示类型,第二个表示个数。
数组的长度,数组大小
fn main() {
let xs: [i32; 5] = [4,5,6,7,8];
println!("{} {} {}", xs[0], xs.len(), mem::size_of_val(&xs)); // 4 5 20
}
20B。
注意与内存相关的操作是用:mem
包。
切片操作:
let ys = &xs[2..4];
println!("{:?}", ys);
字符串
fn main() {
let s = "String"; // &str
let ss = String::from("String!"); // std::string::String type
println!("{}", s);
println!("{}", ss[0]); // wrong
}
注意两种写法都不允许index.
转化为数组类型:
let s = "String".to_string();
数组切片
fn main() {
let s = "String".to_string(); // ^str
let ss = String::from("String!"); // std::string::String type
let slice = &ss[0..4];
println!("{}", slice); // Stri
}
字符串连接
fn main() {
let h = String::from("hello, ");
let w = String::from("world!");
let s = h + &w;
println!("{}", s);
}
注意,后面的要带&
,前面的不用带。其他都是错误的情况。
如果是多个字符串拼接,后面的也一样是加上&
符号:
fn main() {
let h = String::from("hello, ");
let w = String::from("world!");
let v = String::from(" Here I am..");
let s = h + &w + &v;
println!("{}", s);
}
空tuple
fn main() {
// empty tuple
let t = ();
}
https://www.youtube.com/watch?v=yP8N3dd_Kd4&list=PLJbE2Yu2zumDF6BX6_RdPisRVHgzV02NW&index=2
2019.10 Update:
第一届PAT算法直播课培训班招募帖,欢迎点击查看详情、
END.