Rust语言入门第三篇-输出到命令行
介绍
在学习 Rust 语言之前,掌握如何将文字输出到命令行几乎是必不可少的。这是因为在学习阶段,向命令行输出结果几乎是唯一的方式。
Rust 提供了两种主要的输出文字的方式:println!()
和 print!()
。这两个 “函数” 都可以向命令行输出字符串,但区别在于前者会在输出的末尾附加一个换行符。值得一提的是,println!()
和 print!()
实际上不是函数,而是宏规则(macro)。
大家可能很疑惑为什么 println!("Hello World")
中的 println
后面还有一个 !
符号,难道 Rust 中所有的函数调用都需要在函数名后面加一个感叹号?显然,并不是这样。事实上,println
并不是一个普通的函数,而是一个宏(macro)规则。
宏是 Rust 中的一种强大的功能,允许在编译时执行元编程,从而可以生成代码。宏允许程序员编写类似于函数调用的语法,但在编译时会展开成更复杂的代码。这种特性使得 Rust 中的宏非常灵活,可以用于各种目的,例如代码重用、模式匹配等。
在 Rust 中,宏的调用需要在宏名后面加上感叹号 !
,以区别于普通的函数调用。因此,当我们写 println!("Hello, World!")
时,println
实际上被展开为一系列代码,用于在命令行输出字符串 "Hello, World!"
,并在最后添加一个换行符。
虽然这里不需要深入了解宏的工作原理,但这种语法的存在使得 Rust 具有强大的元编程能力,可以在编译时生成复杂的代码结构,从而提高代码的灵活性和可维护性。
println! 和 print!
因此,要输出一段文字到命令行,可以使用以下方式:
println!("Hello, World!");
或者:
print!("Hello, World!");
第一个示例中的 println!()
会在输出后自动添加一个换行符,而第二个示例中的 print!()
则不会。
占位符{}
fn main() {
let a = 12;
println!("a is {}", a);
}
在 Rust 中,{}
是一种格式化字符串的占位符,用于在打印或格式化文本时插入变量的值。在上面的代码中,println!("a is {}", a)
中的 {}
就是一个占位符,它表示在输出时将变量 a
的值插入到该位置。
具体来说,{}
表示使用默认的格式化方式输出变量的值。对于整数类型,就是以十进制方式输出;对于浮点数类型,就是以小数点形式输出;对于字符串类型,就是直接输出字符串等等。
如果需要指定更复杂的格式,比如控制小数点后的位数,或者指定对齐方式等,可以在 {}
中使用更多的格式化选项。例如:
{:.2}
表示保留两位小数;{:<10}
表示左对齐并占据10个字符的宽度;{:^10}
表示居中对齐并占据10个字符的宽度;- 等等。
但在上面的代码中,我们只使用了最简单的 {}
占位符,因此打印出的文本将会是 “a is 12”,其中 12
是变量 a
的值。
可能小伙伴想到多个可以不可,可以的
fn main() {
let x = 5;
let v = 5;
println!("The value of x is:{},The value of v is:{}",x,v);
}
java 对比Rust的输出到命令行+占位符
如果看到这里为什么我要搞个对比 哈哈哈 凑字
输出到命令行
在 Java 中,System.out.println()
和 System.out.print()
是用于在控制台输出文本的两个方法
。它们的区别在于:
System.out.println()
输出文本后会自动换行,而System.out.print()
则不会自动换行,会在同一行继续输出。
而在 Rust 中,println!
和 print!
是用于格式化输出文本的两个宏
。它们的区别与 Java 中类似:
println!
输出文本后会自动换行,而print!
则不会自动换行,会在同一行继续输出。
所以,两者的区别在于是否在输出后自动换行。这种区别在编写需要格式化输出的文本时非常有用,可以根据需求选择适合的宏来实现所需的输出行为。
占位符
在 Java 中,常用的占位符主要是通过 String.format()
方法来实现的,通常使用 %
后跟一个字母来表示不同类型的数据。例如:
%s
表示字符串%d
表示整数%f
表示浮点数%b
表示布尔值- 等等
在 Rust 中,常用的占位符主要是通过格式化宏 format!
、println!
和 print!
来实现的,使用 {}
来表示占位符,通常会在 {}
中指定变量或者表达式。例如:
{}
表示默认格式化输出{:.2}
表示保留两位小数{:<10}
表示左对齐并占据10个字符的宽度{:^10}
表示居中对齐并占据10个字符的宽度- 等等
因此,Java 中的占位符是通过特定的符号表示不同类型的数据,而 Rust 中的占位符则更加灵活,可以通过在 {}
中指定格式化选项来实现更复杂的格式化需求。