zoukankan      html  css  js  c++  java
  • Rust 函数

    函数

    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);
    

    只是 其用法要比许多脚本语言麻烦多了!

    用放荡不羁的心态过随遇而安的生活
  • 相关阅读:
    SQL SERVER 全文索引分词
    Json官方介绍
    SQL Try Catch(转载http://www.cnblogs.com/jimmyray/archive/2011/08/02/2125069.html)
    SQL函数记录
    SQL事务处理代码(SQL Server 2000 & 2005)
    SQL通用分页存储过程
    [导入]SoapExtension 1.0 的问题与解决
    BugTracker.NET 汉化手札
    [导入]我对J2EE和.NET的一点理解
    PostgreSQL 8.0.2 应用报告
  • 原文地址:https://www.cnblogs.com/re-myself/p/5532474.html
Copyright © 2011-2022 走看看