Rust-定义函式Function(二)

函式传递参数

每次调用函式时都打印相同的hello word的函式不是很有用处

这时候可以传递参数给函式会显得更有意义

fn hello_word(name: String) {
    println!("{} hello", name)
}

hello_word(String::from("Mike"));

输出
Mike hello

函式参数的定义与变数定义非常相似

因此可以将面的函式解释为

{
    let name: String = String::from("Mike");
    println!("{} hello", name)
}

变数的定义与函式参数的定义主要的差别在於函式定义需要明确的指定类型

变数的定义可以依赖类型推断

编译器会使用类型推断来检查参数值是否合法

fn f(c: i16) {}

f(5.); // 非法因为是浮点数
f(5u16); // 非法因为是u16型别
f(5i16); // 合法
f(5); // 合法因为传递是无约束得整数类型参数会变函式限制为i16类型

函式按"值"传递参数

参数不仅仅是传递物件的新名称是传递物件的副本,此副本在调用函式时创建并在函式结束且控制返回到调用者时销毁它

例如下面

fn test(mut f: f64) {
    f *= 10.;
    println!("{}", f)
}

let f = 5.;
test(f);
println!("{}", f);

输出
50
5

在一开始就宣告的f变数在传递给test函式的,并在函式中保留使用f变数并更改变数得值并打印,函式结束反给调用者,然侯在印出f变数,这个变数与调用时一样

实际上传递给函式的不是这个变数而是变数的"值"并在函式结尾时销毁

函式返回值

函式除了能接收参数之外还可以计算结果并返回给调用者

fn test(f: f64) -> f64 {
    return f * 10.;
}

println!("{}", test(5.));

返回值需要再函式签名之後用"→"并指定型别


<<:  网路架构检视 - 网路分段/分区与 IP 发放

>>:  DAY 13 Big Data 5Vs – Variety(速度) Glue(1) Crawler

Day 11 | 嵌套元件(二)

本来是没打算分成两天的。但第一天放入了程序码让文章看起来比较冗长,所以只好拆两天啦!今天一样也是 嵌...

【在 iOS 开发路上的大小事-Day11】透过 CocoaPods 来管理第三方套件

前情提要 一般在开发的时候,有些功能可能自己写不出来,但是网路上已经有别人写好的,那我们只需要将其引...

Day41. 备忘录模式

本文同步更新於blog Memento Pattern 透过对象外的存档,让对象能够载入之前的状态...

EP 8: Build a MockData and Register Page Route to Shell

Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...

[Java Day02] 我的第一支Java程序 & 程序卡与范例档的使用

相关档案网址 https://coding104.blogspot.com/p/java.html ...