Rust 函数
2016-04-29 16:54
369 查看
函数
defined
fn main() { print_sum(5, 6); } fn print_sum(x: i32, y: i32) { println!("sum is: {}", x + y); }
函数定义时必须声明变量的类型,变量之间用逗号分隔。
返回值
fn add_one(x: i32) -> i32 {x + 1 // 不可以加分号
}
表达式与语句 (expression VS statement)
(Rust is primarily an expression-based language. There are only two kinds of statements, and everything else is an expression.)Rust 是以表达式为主的语言。在Rust中只有两种语句,其他的全是表达式。
语句和表达式的区别:表达式有返回值,而语句没有。语句: x+1; 没有返回值。并不是所有的分支都有返回值。 在Rust中有两种语句:声明式语句和表达式语句。其他的一切都是表达式。
在其他一些语言中可以连续声明相同的变量并赋值。如下:
x = y = 5
然而在Rust中,使用let声明变量并不是表达式。
let x = (let y =5); //compile-time error
Rust不想其他的语言可以连续赋值,在Rust中会被赋值为一个空的元组(),因为一个被“赋”的值只能有一个 owner
let mut y = 5; let x = (y = 6); // x has the value `()`, not `6`
Rust 中另一种语句就是表达式语句。它被如此设计的目的是可以将表达式变为语句。在实际的环境,有人喜欢在一行写多个语句,那么就需要分号间隔开两个语句了。这与大部分语言都相似。
fn add_one(x: i32) -> i32 { x + 1 }
但是这个例子就不可以用分号结束语句,否则 会返回 () ,但是编译器认为这样是不正确的,所以会在编译时期给出错误提示。
Rust也可以像其他语言 return返回。
fn foo(x: i32) -> i32 { return x + 1; }
这种比较直观,但是明显 表达式 的写法更加有 逼格
diverging functions
原谅我的英语烂,实在不知道如何翻译!这是Rust中的特殊语法,并不会有返回值!像java中的void
fn diverges() -> ! { panic!("This function never returns!"); }
panic! 是个宏指令!用于打印 程序运行时导致程序crash的信息。
这种函数可被用作任何类型
let x: i32 = diverges(); let x: String = diverges();
函数指针
看到这四个字不要慌,Rust不是c++!!!let f: fn(i32) -> i32;
意思很明显,将f声明为一个函数类型,许多脚本语言中都有这种用法。
fn plus_one(i: i32) -> i32 { i + 1 } // without type inference let f: fn(i32) -> i32 = plus_one; // with type inference let f = plus_one; let six = f(5);
只是 其用法要比许多脚本语言麻烦多了!
相关文章推荐
- 云在青天水在瓶的博客开通啦,啦啦啦啦啦
- recvfrom的使用技能之第一次接受打印出的发送方IP地址总是0.0.0.0
- js获取值的方式
- NOIP200902分数线划定
- Sql Server查询性能优化之走出索引的误区
- 【转载】 ISO14229系列之二:诊断指令格式和相关概念
- 深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解
- 学习ng2,从zonejs开始(非官方翻译) ----angular2系列(一)
- editplus中文版 v4.00.631 汉化绿色版
- [BZOJ2937][POI2000]建造酿酒厂(线性维护队列思想)
- [Swift 开发] 有效性检查
- camel配置(1)
- 一元运算符重载
- Android历史版本总结
- 关于百度地图的一个问题
- Comet:基于 HTTP 长连接的“服务器推”技术
- Property和实例变量(Ivar)的最佳实践
- 警告:object file was built for newer iOS version (8.3) than being linked (7.0)
- 百度地图之地理编码
- JAVA中Comparable和Comparator的区别