Rust从入门到放弃(1)—— hello,world

安装及环境配置

  • 特点:安全,性能,并发
  • rust源配置
  • RLS安装
  • cargo
    • rust管理工具,该工具可以愉快方便的管理rust工程

      #!/bin/bash
      mkdir learn
      cd learn
      cargo init  ## 该命令会在当前目录下初始化一个## 目录下会出现一个Cargo.toml文件,这是Cargo的配置文件## 还有一个src目录,目录中包含一个main.rs的初始文件
      cargo run   ## 命令会编译并运行程序
      cargo build ## 编译工程

变量与函数

函数定义 fn main(){}

fn main(){let world = "world";println!("hello, {}!", world);
}
//该例子中可以看出来,变量定义使用关键字 let,字符串格式化中的占位符采用 {}
  • let 关键字用于引入一个变量
  • 占位符 {},在Rust中比较通用,将变量转化为字符串,这里的变量可以是数值或者字符串。
  • 返回值,->
fn main() {let x:i32;let y:i32;x = 10;y = 5;println!("x = {}, y = {}", x, y);println!("add(x, y) = {}", add(x,y));
}fn add(x:i32, y:i32) ->i32{x+y// return x+y;
}

变量声明

let val:i32 = 1
  • 在rust中类型定义采用 var: type的形式
fn foo(_x :&'static str) -> &'static str{"world"
}
fn main(){println!("hello, {}!", foo("bar"));
}
  • 静态字符串变量 &'static str

  • 注意:在rust中,str是关键字,不能用作变量名

let (x,y) = (5, 'a')  
// 类型分别是i32,char
  • 默认情况下,Rust中的一切都是不可变的,也就是说变量定义后不可改变其值,下面这段代码编译不会通过。
let  x:i32 =10;
x = 6;
// ^^^^^ cannot assign twice to immutable variable
  • 如果要改变变量,声明时需要加上mut关键字
let mut x:i32 = 10
x = 6
  • 字符串,Rust中存在两种字符串类型,str和String。

    • &str: 字符串切片,固定大小的,不可变的UTF-8字节序列。
    let x = "hello world!";
    let y:&str = "hahahhahahah";
    • String对象是可变的,可以用String::from初始化该类型
    let x = String::from(“Hello, World”);
    let y: String = String::from(“Isn’t it a wonderful life?");
{let mut s1 :&str = "s1 is &str";let mut s2 :String = String::from("s2 is String");println!("{}, {}", s1, s2);// s1 is &str, s2 is Strings1 = "s1 is changed";s2 = String::from("s2 is changed");println!("{}, {}", s1, s2);// s1 is changed, s2 is changed
}
  • 数字
    • i8 i16 i32 i64
    • u8 u16 u32 u64
    • isize usize
    • f32,f64
  • 数组
let x = [1, 2, 3];
let y: [i32; 3] = [4, 5, 6];
  • 数组不常使用,rust中vector更为常见
let x = vec![1, 2, 3];
let y: Vec<i32> = [4, 5, 6];
  • 元组
    • 有序的、不可变的对象列表

      let x = (5, 'A');
      let y : (i32, char) = (12, 'c');
      let v = x.0 // v == 5
      let a = y.1 // a == 'c'

Rust中的所有权

  • 所有权
    • Rust中,每个变量对绑定到它上的值有所有权。
    • Rust中堆上的每个值都有一个所有者(变量)
    • 当所有者超出作用域时,该值将被丢弃
    // String的长度是可变的,分配在堆中,所以这里的会发生所有权移动。
    // 在Rust中,这个过程称之为移动move,即原本x的值移动到了y上,x失效了。
    fn main(){let x = String::from("hello"); // x是"hello"let y = x; // y是“hello”,这时x已经失效println!("x is {}, f(x) is {}",x, y); // 会出错,因为x失效了。 
    }
  • 借用
    • 任何借用的有效期都不能超过原始所有者的作用域
    • 任何时刻,都能够不可变的借用一个资源许多次
    • 任何时刻,都能够可变的借用一个资源一次

方法&关联函数

  • impl作为实现结构体方法的关键字,方法的输入参数中第一个是self。调用采用.
  • impl范围内,输入参数没有self的方法,即为关联函数。调用使用:
  • 关联函数经常被用作返回一个结构体新实例的构造函数。下面的例子中,Square即为Rect的关联函数。
  • 每个Struct允许多个impl
// 定义一个结构体
struct Rect{width: i32,length: i32,
}// 方法
impl Rect{fn Area(&self) -> i32{self.width * self.length}}// 关联函数
impl Rect{  fn Square(w:i32) -> Rect{Rect{width :w,length: w,}}
}

转载于:https://www.cnblogs.com/gexin/p/10941227.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客33-tokitsukaze and Number Game(数论)

题目描述 tokitsukaze又在玩3ds上的小游戏了&#xff0c;现在她遇到了难关。 tokitsukaze得到了一个整数x&#xff0c;并被要求使用x的每一位上的数字重新排列&#xff0c;组成一个能被8整除的数&#xff0c;并且这个数尽可能大。 聪明的你们请帮帮可爱的tokitsukaze&#xff0…

手摸手,带你用vue撸后台 系列一(基础篇) - 掘金

完整项目地址&#xff1a;vue-element-admin 系列文章&#xff1a; 手摸手&#xff0c;带你用 vue 撸后台 系列一&#xff08;基础篇&#xff09;手摸手&#xff0c;带你用 vue 撸后台 系列二(登录权限篇)手摸手&#xff0c;带你用 vue 撸后台 系列三 (实战篇)手摸手&#xf…

21、python基础学习-new_three_menu

1 #!/usr/bin/env python2 #__author: hlc3 #date: 2019/5/294 5 menu {6 北京: {7 海淀: {8 五道口: {9 soho: {}, 10 网易: {}, 11 google: {} 12 }, 13 中关村: { 14 …

文献笔记(十六)

一、基本信息 标题&#xff1a;一种基于 C 语言访问 MySQL 数据库的研究 时间&#xff1a;2016 出版源&#xff1a;贵州轻工职业技术学院 领域分类&#xff1a;数据库与信息管理 作者&#xff1a;唐林 副教授&#xff0c; 研究方向&#xff1a; 计算机应用 二、研究背景 相关工…

webpack+vue+mui学习心得

引入mui 1.不需要npm安装; 直接从官方下载丢进来 2.那就是全局引用了; 没错,就是index.html里直接引入,当然也可以main.js引入,随意啦! so easy 3.找到webpack.base.conf.js,在module与plugins之间插入以下代码: 4.这样就可以在项目里面直接用了.然就是mui与vue-router及点…

[java设计模式简记] 观察者模式(Observer-Pattern)

观察者模式(Observer-Pattern) 数据主体拥有需要数据的对象的数据&#xff0c;并且数据改变时需要数据的对象要及时知道 意图&#xff1a; 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。主要…

【ARTS】01_04_左耳听风-20181203~1209

ARTS&#xff1a; Algrothm: leetcode算法题目Review: 阅读并且点评一篇英文技术文章Tip/Techni: 学习一个技术技巧Share: 分享一篇有观点和思考的技术文章Algorithm Single Number https://leetcode.com/problems/single-number/ 1&#xff09;problem Given a non-empty arra…

vue项目(webpack+mintui),使用hbuilder打包app - 小小人儿大大梦想 - 博客园

一、配置config/index.js 本人没有配置index.js文件&#xff0c;就开始进行了打包&#xff0c;结果最终效果是页面空白&#xff0c;解决了空白&#xff0c;接着底部图标&#xff08;我是用的阿里巴巴图片&#xff09;资源找不到。所以配置这步比较重要。 &#xff08;1&#…

caffe介绍

转载于:https://www.cnblogs.com/Artimis-fightting/p/10945099.html

python-mysql 基础知识记录

cursor.fetchone() 与 cursor.fetchall() 如果查询结果为空&#xff0c;前者返回 None&#xff0c;后者返回[] 此时如用 len() 函数计算长度&#xff0c;前者报错&#xff0c;后者返回0 转载于:https://www.cnblogs.com/ZuoAn-xieyang/p/10097230.html

微服务之consul(一) - 诗码者 - 博客园

一、概述 consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案&#xff0c;不再需要依赖其他工具&#xff08;比如ZooKeeper等&#xff09;。服务部署简单&#x…

C#动态加载dll,dll目录指定

<?xml version"1.0"?><configuration><startup> <supportedRuntime version"v4.0" sku".NETFramework,Versionv4.0"/></startup> <runtime> <assemblyBinding xmlns"urn:schemas-microsoft-com:a…

RestFramework之认证组件

一、认证组件的介绍 对于认证&#xff0c;我们一般有三种方式&#xff0c;即cookie, session,token, cookie,是将信息存放在客户端(浏览器上)&#xff0c;信息不安全&#xff1b;session,把信息放在服务器数据库中&#xff0c;但是要是信息量较大&#xff0c;对服务器的压力就会…

图解基于 Node.js 实现前后端分离 - CSDN博客

因为会上出了个意外&#xff0c;ppt图片全部丢失&#xff0c;只好对着白板跟大家交流了半个多小时。由于我做演讲不喜欢写太多的文字&#xff0c;没有图片的情况下讲漏了一些内容。这篇文章是我在会上分享内容对照ppt进行地整理。 基本介绍 首先从一个重要的概念“模板”说起…

java基础之XML

目录 java基础之XML1. XML解析概述2. DOM4J介绍2.1 常用包2.2 内置元素2.2 Element类2.3 Attribute类2.4 常用操作3. 代码演示3.1 DOM4J读取xml文件3.2 DOM4J创建xml文件3.2 DOM4J修改xml文件java基础之XML XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性…

CF176E Archaeology(set用法提示)

题目大意&#xff1a; 给一棵树&#xff0c;每次激活或熄灭一个点&#xff0c;每次问这些点都联通起来所需的最小总边权 分析&#xff1a; 若根据dfs序给所有点排序&#xff0c;为$v1,v2,v3....vk$&#xff0c;那么答案就是$(dis(v1,v2)dis(v2,v3)...dis(vk-1,vk)dis(vk,v1))/2…

网上整理的对于Rest和Restful api的理解 - 那啥快看 - 博客园

一、什么是Rest? REST不是"rest"这个单词&#xff0c;而是几个单词缩写 -- REpresentational State Transfer 直接翻译&#xff1a;表现层状态转移&#xff0c;但这个翻译正常人根本看不懂&#xff0c;找到的一种最好理解的说法是&#xff0c;URL定位资源&#xff…

P1101 单词方阵(DFS)

题目描述 给一n \times nnn的字母方阵&#xff0c;内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 88个方向的任一方向&#xff0c;同一单词摆放时不再改变方向&#xff0c;单词与单词之间可以交叉,因此有可能共用字母。输出时&#xff0c;…

企业级rancher搭建Kubernetes(采用rancher管理平台搭建k8s)

一、简介 Rancher简介 来源官方&#xff1a;https://www.cnrancher.com/ Rancher是一个开源的企业级容器管理平台。通过Rancher&#xff0c;企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部…

[工具]java_sublime的快速使用

目录 使用 : 怎么运行: 调整字体: 使用 : 新建--->写好代码后-->另存为尾缀是.java的文件 怎么运行: 在你另存为的目录下cmd调用控制台输入dos指令--->执行javac 文件名.java(有.java尾缀)(编译为.class文件)--->java 文件名(没有.class尾缀设计者认为执行的是…