Rust 变量与函数

本文介绍了Rust语言中的变量声明、绑定与作用域规则,包括不可变与可变变量的使用,以及如何声明和使用函数,涵盖了函数参数类型声明、返回值、发散函数等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量:

绑定

fn main() {
    let x = 5;//let关键字被用来声明一个绑定
    let (a ,b) = (1 ,2);//类似python的语法,在Rust中叫做模式
    let t: i32 = 5;//添加一个添加类型为32位整型

}

上面的代码在编译的时候会出现警告,告诉你绑定的变量都没有使用过。

fn main() {
    let x = 5;//let关键字被用来声明一个绑定
    x = 10;//会得到编译错误,因为绑定的默认是不可以改变的 
}

而且变量绑定必须要初始化,若是输出未初始化的绑定会无法编译

可变性

如果想要可以随意被赋值、改变使用mut关键字

fn main() {
    let mut x = 5;//mut关键字使x可以被改变为其他值
    x = 10; 
}

作用域

与c语言的作用域原理基本类似,用花括号来限制作用域。不同的是,在同一个作用域当中,后声明的同名变量绑定会被覆盖。

fn main() {
    let x: i32 = 8;
    {
        println!("{}",x);//输出8
        let x = 12;
        println!("{}",x);//输出12
    }
    println!("{}",x);//输出8
    let x = 42;//可以重复绑定x
    println!("{}",x);//42
}

例子

fn main() {
    let mut x: i32 = 1;
    x = 7;
    let x = x;//把x绑定到x上,x值为7

    let y = 4;
    let y = "abc";//y改变绑定的类型
}

函数:

用关键字fn来声明函数

fn print_sum(x: i32, y: i32)//声明函数print_sum,设置两个i32类型参数x和y输出和
{
    println!("sum is {}",x+y);
}
fn main() {
    print_sum(5,6);    
}

与let不同,你必须为函数参数声明类型。下面代码将不能工作:

fn print_sum(x, y){
    println!("sum is: {}", x+y);
}

会获得如下错误:

expected one of `!`,`:`,or `@`, found `)`
fn  print_sum(x, y) {

有返回值的函数

fn get_sum(x: i32, y: i32)->i32//返回一个i32类型
{
    x+y//注意这里没有分号
}
fn main() {
    println!("{} ",get_sum(5,6));   
}

很奇怪?

文档中的意思是
表达式返回一个值,而语句不返回值
x+y;是一个语句
x+y是一个表达式

y=5是一个表达式,但是返回的值没什么用,在c语言当中些y=5是会返回y的这个值,而在rust语言当中不会

//在rust语言当中
let mut y = 5;
let x = (y = 6);//x 的值是 `()`,不是 `6`
int y=5;
int x = (y = 6);//x的值会是6,因为y=6的表达式返回6

它的目的是把任何表达式变为语句
这意味着你用分号来分隔各个表达式

提早返回:
就是提供了人性化的return语句

fn get_sum(x: i32, y: i32)->i32//返回一个i32类型
{
   return  x+y;
}
fn main() {
    println!("{}",get_sum(1,2));
}

发散函数:

发散函数就是什么也不返回的函数。
根据Rust的含义,空函数会返回一个空的元组()

fn diverges() ->! {//发散函数
    panic!();
}
fn Void(){
    println!("void");
}
fn main() {
    println!("{} is a truple",Void()==());//Void返回一个()
    diverges();//什么也不返回
}

发散函数有什么意义,可以参考这篇博客
http://blog.youkuaiyun.com/dagewxw/article/details/50205985

函数指针:

和c语言当中的函数指针比较像,就是把函数当成一个对象来使用

fn plus_one(i: i32) -> i32{
    i+1
}
fn main() {
    let f: fn(i32) -> i32 = plus_one;
    let ff = plus_one;
    println!("{}",ff(5));//6
    println!("{}",f(5));//6
}

来自Rust book 1.14版本

to be continue~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值