昆明app网站开发公司,网站前台设计过程,中国做网站公司,app开发搭建Rust基本语法
Hello World
fn main() {println!(Hello, world!);
}Rust数据类型
Rust 是一种静态类型的语言。 Rust 中的每个值都是某种数据类型。 编译器可以根据分配给它的值自动推断变量的数据类型。
声明变量
使用关键词 let 声明变量。
直接赋值的场合R…Rust基本语法
Hello World
fn main() {println!(Hello, world!);
}
Rust数据类型
Rust 是一种静态类型的语言。 Rust 中的每个值都是某种数据类型。 编译器可以根据分配给它的值自动推断变量的数据类型。
声明变量
使用关键词 let 声明变量。
直接赋值的场合Rust会自动的推断变量类型在ide可以很方便的查看 fn main() {let company_string TutorialsPoint; // string 类型let rating_float 4.5; // float 类型let is_growing_boolean true; // boolean 类型let icon_char ♥; //unicode character 类型println!(company name is:{},company_string);println!(company rating on 5 is:{},rating_float);println!(company is growing :{},is_growing_boolean);println!(company icon is:{},icon_char);
}
在上面的代码示例中变量的数据类型是从被分配的值而推断出来的。例如变量 company_string 被 Rust 分配了 string 字符串数据类型变量 rating_float 被分配了 float 浮点数据类型等等。
println! 宏函数有两个参数
一个参数是占位符 { }特别的语法 一个参数是变量或者常量 占位符将被变量的值替换掉
上述代码片段将输出以下内容
company name is: TutorialsPoint
company rating on 5 is:4.5
company is growing: true
company icon is: ♥需要注意的是Rust的变量默认为不可变变量
Rust为了糕饼发进行设计他的变量使用let关键词声明时是默认不可边的
比方说:
let a 123;而接下来的三句
a abc;
a 4.56;
a 456;都会报错,so why?
第一行的错误在于当声明 a 是 123 以后a 就被确定为整型数字不能把字符串类型的值赋给它。
第二行的错误在于自动转换数字精度有损失Rust 语言不允许精度有损失的自动数据类型转换。
第三行的错误在于 a 不是个可变变量。
前两种错误很容易理解但第三个是什么意思难道 a 不是个变量吗
这就牵扯到了 Rust 语言为了高并发安全而做的设计在语言层面尽量少的让变量的值可以改变。所以 a 的值不可变。但这不意味着 a 不是变量英文中的 variable官方文档称 a 这种变量为不可变变量。
如果我们编写的程序的一部分在假设值永远不会改变的情况下运行而我们代码的另一部分在改变该值那么代码的第一部分可能就不会按照设计的意图去运转。由于这种原因造成的错误很难在事后找到。这是 Rust 语言设计这种机制的原因。
当然使变量变得可变mutable只需一个 mut 关键字。
let mut a 123;
a 456;这样程序就可以运行了
常量与不可变变量的区别
既然不可变变量是不可变的那不就是常量吗为什么叫变量
变量和常量还是有区别的。在 Rust 中以下程序是合法的
let a 123; // 可以编译但可能有警告因为该变量没有被使用 let a 456;
但是如果 a 是常量就不合法
const a: i32 123; let a 456;
变量的值可以重新绑定但在重新绑定以前不能私自被改变这样可以确保在每一次绑定之后的区域里编译器可以充分的推理程序逻辑。 虽然 Rust 有自动判断类型的功能但有些情况下声明类型更加方便
let a: u64 123;
这里声明了 a 为无符号 64 位整型变量如果没有声明类型a 将自动被判断为有符号 32 位整型变量这对于 a 的取值范围有很大的影响。
重影Shadowing
重影的概念与其他面向对象语言里的重写Override或重载Overload是不一样的。重影就是刚才讲述的所谓重新绑定之所以加引号就是为了在没有介绍这个概念的时候代替一下概念。
重影就是指变量的名称可以被重新使用的机制
实例
fn main() { let x 5; let x x 1; let x x * 2; println!(The value of x is: {}, x);
} 这段程序的运行结果
The value of x is: 12
重影与可变变量的赋值不是一个概念重影是指用同一个名字重新代表另一个变量实体其类型、可变属性和值都可以变化。但可变变量赋值仅能发生值的变化。
let mut s 123;
s s.len();这段程序会出错不能给字符串变量赋整型值。