Rust中函数和作用域
起因
看图了解本文的内容

函数
函数定义///# 函数的使用
/// 1. fn 后跟函数名+小括号 ->()相当于其他语言中void表示无返回值,可以简化不写
/// 2. { //函数主体内容 }
/// 简写方式 fn func_test() { println!("denfine function!"); }
fn func_test() -> () {
println!("denfine function!");
}
带返回值的函数
///# 带返回值的函数
///1. 在函数名后括号中 先写参数名 后跟参数类型. 这和c/c++/c#/java语言不同, 和go语言一样
///2. 和其他语言(c/c++/c#/go/java)不一样, 返回值前不用加return,这点有点怪异,在业务逻辑复杂的情况,看代码不是很好
fn add(x: i32, y: i32) -> i32 {
x + y
}
///# 调用带返回值的add函数
fn func_call() {
let x = 100;
let y = 200;
let result = add(x, y);
println!("x+y={}", result);
}
回调函数的使用
///# hi函数作为参数调用
fn hi(name: &str) {
println!("call {} () function.", name);
}
///# hello函数最为参数调用
fn hello(name: &str) {
println!("call {} () function.", name);
}
///# 参数为函数指针
///可以这样理解func:fn(&str) => fn func(&str) &str为字符串
fn callback_(name:&str,func:fn(&str)){
func(name);
}
///# 回调函数使用
fn callback_call(){
let str1 ="hi";
let str2="hello";
//第二个参数传入hi函数
callback_(str1,hi);
//第二个参数传入hello函数
callback_(str2,hello);
}
方法
在常用c/c++/c#/java语言中,函数和方法等同,在Rust语言中,方法和函数是有区别的.主要区别在方法是实例对象中.
///# 结构体
///# 定义结构体,通过#[derive(Debug)]注解,才能让println!打印结构体内容
#[derive(Debug)]
struct People {
id: u32,
//id
name: &'static str,
//姓名 字符串
sex: &'static str, //性别
}
///# 使用impl对对象People增加行为(定义方法)
impl People {
//self 表示自身(这里为People)
fn show(&self) {
println!("id={} name={}", self.id, self.name);
}
}
fn method_call() {
let p = People {
id: 1,
name: "tom",
sex: "man",
};
p.show(); //调用p中show方法
}
作用域
变量和实例作用域这个概念,在常见的编程语言都存在的,这个不是新的东西。///# 作用域
///在Rust语言中,在同一个作用域中声明多个同名的变量是允许的,但还是尽量不要在同一个作用域内声明多个同名的变量
fn scope_test() {
//x的作用域是在函数内
let x = 10;
println!("x={}", x);
{
//y的作用域在 所在的大括号内,在大括号之外是无法访问变量y的
let y = 20;
println!("y={}", y);
}
//在Rust中同一个作用域内,可以声明多个同名的变量,这点和主流编程语言不一样
let x = 20;
println!("x={}", x);
}
秋风
2019-10-14