rust疑难进阶手册(2)-类型,打印输出(2)

目录

    • 类型转换
    • 浮点字面值
    • 字符类型
    • 数组
    • 元组

类型转换

使用as

[maisipu@192 src]$ cargo run
   Compiling learnrust v0.1.0 (/home/maisipu/learn/learnrust)
    Finished dev [unoptimized + debuginfo] target(s) in 0.57s
     Running `/home/maisipu/learn/learnrust/target/debug/learnrust`
11,11
fn main() {
    let x:f32=11.111;
    let y:f64=11.1111111111111;
    println!("{},{}",x as i32 ,y as i8);
}

浮点字面值

fn main(){
    let x=11.111_f32;
    let y=11.1111111111111_f64;
    println!("{},{}",x,y);
}
[maisipu@192 src]$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `/home/maisipu/learn/learnrust/target/debug/learnrust`
11.111,11.1111111111111
[maisipu@192 src]$ 

字符类型

char为字符类型,用32位值形式表示unicode字符。

fn main(){
    let x='你';
    let y:char='z';
    println!("{},{}",x,y);
}

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `/home/maisipu/learn/learnrust/target/debug/learnrust`
你,z

数组

  • 数组表达式构造数组。数组表达式有两种形式。

第一种形式列出了数组中的每个值。
语法是一个逗号分隔的统一类型的表达式列表,用方括号括起来。这将生成一个数组,其中按写入顺序包含这些值中的每一个。

第二种形式的语法是由方括号中的分号(;)分隔的两个表达式。
前面的表达式;称为重复操作数。后面的表达式;称为长度操作数。它必须具有usinize类型,并且是常量表达式,例如文字或常量项。此形式的数组表达式创建一个长度为长度操作数值的数组,每个元素都是重复操作数的副本。

当重复操作数是常量项时,将按长度操作数的值对其求值。如果该值为0,则根本不计算常量项。对于不是常量项的表达式,只计算一次,然后将结果复制到长度操作数的值次。

  • 数组可以迭代
    for表达式用于在std::iter::IntoIdeator的实现所提供的元素上循环。如果迭代器为空,则for表达式完成。
fn main(){
    let y=[11,22,33];
    for i in y{
        println!("{}",i);
    }
    let z=[111;9];
    println!("{:?}",z);
}
11
22
33
[111, 111, 111, 111, 111, 111, 111, 111, 111]

元组

  • 元素的每个类型可以不同

  • 元组不能迭代访问

fn main(){
    let y=(11,22,33);
    for i in y{
        println!("{}",i);
    }
}

上面代码是错误的,因为元组的元素类型不一定会一致

  • 只允许用常量作为索引

与字段访问表达式不同,元组索引表达式可以是调用表达式的函数操作数,因为它不能与方法调用混淆,因为方法名称不能是数字。

尽管数组和切片也有元素,但必须使用数组或切片索引表达式或切片模式来访问它们的元素。

fn main(){
    let y=(1,22,333);
    println!("{},{},{}",y.0,y.1,y.2);
    let z=(111,"asddsaddaa");
    println!("{:?}",z);
}
[maisipu@192 src]$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `/home/maisipu/learn/learnrust/target/debug/learnrust`
1,22,333
(111, "asddsaddaa")

  • 元组经常作为函数的返回类型,可以返回多个值
  • 元组也可以作为函数的参数
[maisipu@192 src]$ cat main.rs
fn get_sum(nums:(i32,i32,i32))->(i32,i32){
    let mut result:i32=0;
    result=result+nums.0+nums.1+nums.2;
    (result,result/3)
}
fn main(){
    let y=(1,22,333);
    println!("{:?}",get_sum(y));
}
[maisipu@192 src]$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `/home/maisipu/learn/learnrust/target/debug/learnrust`
(356, 118)
[maisipu@192 src]$ 

你可能感兴趣的:(软件架构与设计,rust)