没错这就是输出的第一讲
因为Rust在各方面都很复杂,并不适合第一门语言学。即使有一定基础也要花很长时间入门。所以这里就是详解print!&println!的第一讲,后面还有很多要补充的
输出纯文本
在上一讲中的最后部分我们讲了创建项目,那么在cargo默认生成的项目中会有一个main文件在 yourprojectname/src/main.rs
下打开之后会有初始化的代码如下
fn main() {
println!("Hello, world!");
}
其中fn是定义一个函数。那么众所周知啊,编译器一上来就看main的内容,所以main是不可缺少的。println!是输出完成后换行命令,其定义为
//官方定义 https://doc.rust-lang.org/std/macro.println.html
macro_rules! println {
() => { ... };
($($arg : tt) *) => { ... };
}
和C的printf_s类似(切记切记,printf并没有安全类型检查所以和Rust的print!/println!)
print!和println!的唯一区别是一个输出后没有换行,一个输出后马上换行
输出数字
输出数字需要像C一样标记,标记符为 {}
故代码应为
fn main() {
println!("{}",123);
}
结果为我们可以字符数字一起输出
fn main() {
println!("print:{}",123);
}
可以多个数字字符一起输出
fn main() {
println!("print:{},and print:{}",123,456);
}
但是部分习惯和我们平时的习惯不太一样
比如换行只能使用println!()——设计者认为\n不好理解容易造成混乱的同时,为了输出\n还要再引入转义符,容易造成内存安全和维护不方便,强大的rustc不容易像提供其他疑难解答一样输出正确的报错信息。
事实上,rustc是所有语言中,报错系统和语法检查系统最强大的编译器,因为他编译一次需要经过LLVM的多次转译,其编译时间长和编译原理复杂也是这个原因。但是得益于LLVM,rust和C在部分性能测试中相差无几,甚至在部分场景下占用内存会比C少。
回到正题,换行的实现方法如下
fn main() {
println!("print:{}",123);
println!();
println!("next line");
}
这个print!/println!有多强大?
其标识符可以只能推导变量类型,基于let函数可以玩出很多花样,再比如标识符内还可以填集合下标等。
上一篇:match匹配#1
下一篇:1·Rust的编译器入门