函数(Rust入门)
函数(Rust入门)
注:此文章仅对相关知识点简略讲解,rust 学习路线陡峭,如果发现看不懂,记不住,不理解,活用搜索引擎,这些知识点可以说不是你一个人的误区,所以有很多人都贡献了不错的学习资料
本文章参考自官方学习文档及社区学习文档以下是参考链接:
官方:
Rust(Getting Started)
Rust-Learn
社区:
Rust中文文档
Rust程序设计语言中文版
通过例子学习Rust中文版
直接上手学习推荐:
蓝桥云课原实验楼
概述点函数(function)使用 fn 关键字来声明。函数的参数需要标注类型,就和变量一样,另外如果函数返回一个值,返回类型必须在箭头 -> 之后指定
本文内容:
函数定义
方法
闭包
高阶函数
发散函数
函数定义函数(function)使用 fn 关键字来声明。函数的参数需要标注类型,就和变量一样,另外如果函数返回一个值,返回类型必须在箭头 -> 之后指定。
函数最后的表达式将作为返回值。也可在函数内使用 return 语句来提前返回值。return 甚至也可在循环或 if 内部使用。
让我们使用函数来重写 Fi ...
模块(Rust入门)
模块(Rust入门)本文章参考自官方学习文档及社区学习文档以下是参考链接:
官方:
Rust(Getting Started)
Rust-Learn
社区:
Rust中文文档
Rust程序设计语言中文版
通过例子学习Rust中文版
直接上手学习推荐:
蓝桥云课原实验楼
概述点Rust 提供了一套强大的模块(module)系统,可以将代码按层次分成多个逻辑单元,并管理这些模块之间的可见性(公有(public)或私有(private))。
模块是项(item)的集合,项可是是:函数,结构体,trait,impl 块,甚至其他模块
本文内容:
模块中的项的可见性
结构体的可见性
use 声明
super 和 self
文件分层
可见性默认情况下,模块中的项拥有私有的可见性(private visibility),不过可以加上 pub 修饰语来重载这一行为。模块中只有公有的(public)项可以从模块外的作用域访问
1234567891011121314151617181920212223242526272829303132333435363738394041424344454 ...
流程控制(Rust入门)
流程控制(Rust入门)本文章参考自官方学习文档及社区学习文档以下是参考链接:
官方:
Rust(Getting Started)
Rust-Learn
社区:
Rust中文文档
Rust程序设计语言中文版
通过例子学习Rust中文版
直接上手学习推荐:
蓝桥云课原实验楼
概述点任何编程语言都包含的一个必要部分就是改变控制流程:if/else,for 等。
本文内容:
if/else 条件判断
loop 循环
while 循环
for 循环和区间
match 匹配
if let
while let
if/elseif-else 分支判断和其他语言类似。与很多语言不同的是,Rust 语言中的布尔判断条件不必用小括号包住,且每个条件后面都跟着一个代码块。if-else 条件选择是一个表达式,并且所有分支都必须返回相同的类型。
12345678910111213141516171819202122232425262728fn main() { let n = 5; if n < 0 { print!("{ ...
表达式(Rust入门)
表达式(Rust入门)本文章参考自官方学习文档及社区学习文档以下是参考链接:
官方:
Rust(Getting Started)
Rust-Learn
社区:
Rust中文文档
Rust程序设计语言中文版
通过例子学习Rust中文版
直接上手学习推荐:
蓝桥云课原实验楼
概述点本文内容:
表达式
代码块
左值
右值
语句构成Rust 程序(大部分)由一系列语句构成:
12345fn main() { // 语句 // 语句 // 语句}
Rust 有多种语句。最普遍的语句类型有两种:一种是绑定变量,另一种是表达式带上分号:
123456789fn main() { // 变量绑定 let x = 5; // 表达式; x; x + 1; 15;}
代码块也是表达式,所以它们在赋值操作中可以充当右值(r-values)。代码块中的最后一条 表达式将赋给左值(l-value)。需要注意的是,如果代码块最后一条表达式结尾处有分号,那 么返回值将变成 ()。
注:代码块中的最后一 ...
类型转换(Rust入门)
类型转换(Rust入门)本文章参考自官方学习文档及社区学习文档以下是参考链接:
官方:
Rust(Getting Started)
Rust-Learn
社区:
Rust中文文档
Rust程序设计语言中文版
通过例子学习Rust中文版
直接上手学习推荐:
蓝桥云课原实验楼
概述点
From和Into
TryFrom和TryInto
ToString和FromStr
Rust 使用 trait 解决类型之间的转换问题。最一般的转换会用到 From 和 into 两个 trait。不过,即便常见的情况也可能会用到特别的 trait,尤其是从 String 转换到别的类型,以及把别的类型转换到 String 时。
From和IntoFrom和Into两个trait是内在联系的,事实上这是他们实现的重要部分:如果能把类型 A 转换成类型 B,那么很容易相信我们也能把类型 B 转换成类型 A。
FromFrom trait 允许一种类型定义 “怎么根据另一种类型生成自己”,因此它提供了一种类型转换的简单机制。在标准库中有无数 From 的实现,规定了原生类型及其他常见类型的转换功能 ...
类型系统(Rust入门)
类型系统(Rust入门)本文章参考自官方学习文档及社区学习文档以下是参考链接:
官方:
Rust(Getting Started)
Rust-Learn
社区:
Rust中文文档
Rust程序设计语言中文版
通过例子学习Rust中文版
直接上手学习推荐:
蓝桥云课原实验楼
概述点本文内容:
类型转换
字面量
类型推断
别名
Rust 提供了多种机制用于改变或定义原生类型和用户定义类型,例如:
原生类型的类型转换(cast)
指定字面量的类型
使用类型推断(type inference)
给类型取别名
类型转换Rust不提供原生类型之间的隐式类型转换(coercion),但可以用as关键字进行显式类型转换(casting)
整型之间的转换大体遵循C语言的惯例,除了C会产生未定义行为的情形。在Rust中所有整型转换都是定义良好的。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647// 不显示类型转换产生的溢出警告。#![allow(overflowi ...
变量绑定(Rust入门)
变量绑定(Rust入门)本文章参考自官方学习文档及社区学习文档以下是参考链接:
官方:
Rust(Getting Started)
Rust-Learn
社区:
Rust中文文档
Rust程序设计语言中文版
通过例子学习Rust中文版
直接上手学习推荐:
蓝桥云课原实验楼
概述点
变量绑定
可变变量
作用域和遮蔽
变量先声明
Rust 通过静态类型确保类型安全。变量绑定可以在声明时说明类型,不过在多数情况下, 编译器能够从上下文推导出变量的类型,从而大大减少了类型说明的工作。
变量绑定
使用 let 绑定操作可以将值(比如字面量)绑定(bind)到变量。
123456789101112131415161718fn main() { let an_integer = 1u32; let a_boolean = true; let unit = (); // 将 `an_integer` 复制到 `copied_integer` let copied_integer = an_integer; println!(" ...
自定义类型 (Rust 入门)
自定义类型 (Rust入门)本文章参考自官方学习文档及社区学习文档以下是参考链接:
官方:
Rust(Getting Started)
Rust-Learn
社区:
Rust中文文档
Rust程序设计语言中文版
通过例子学习Rust中文版
直接上手学习推荐:
蓝桥云课原实验楼
概述点
结构体
枚举
use
常量
结构体结构体(structure,缩写成struct)有3种类型,使用struct关键字来创建:
元组结构体(tuple struct),事实上就是具名元组而已
经典的C语言分割结构体(C struct)
单元结构体(unit struct),不带字段,在泛型中很有用
题目由通过例子学习Rust中文版(结构体)
增加一个计算长方形面积的函数 rect_area(尝试使用嵌套的解构方式)。
增加一个函数 square,接受的参数是一个 Point 和一个 f32,并返回一个 Rectangle(长方形)的信息,包括左下角的点,以及长和宽的浮点数值。
1234567891011121314151617181920212223242526272829303132 ...
原生类型 (Rust 入门)
原生类型(Rust入门)本文章参考自官方学习文档及社区学习文档以下是参考链接:
官方:
Rust(Getting Started)
Rust-Learn
社区:
Rust中文文档
Rust程序设计语言中文版
通过例子学习Rust中文版
直接上手学习推荐:
实验楼(通过例子学Rust)
当前文章将会讲解Rust中原生类型(primitive),包含标量类型(scalar type)和复合类型(compound type)。
概述点
标量类型与复合类型
字面量与运算符
元组
数组与切片
标量类型(scalar type)
有符号整型(signed integers):i8、i16、i32、i64 和 isize(指针宽度)。
无符号整型(unsigned integers): u8、u16、u32、u64 和 usize(指针宽 度)。
浮点类型(floating point): f32、f64。
char(字符):单个 Unicode 字符,如 ‘a’,’α’ 和 ‘∞’(每个都是 4 字节)。
bool(布尔型):只能是 true 或 false。
单元类型(unit ...
竞争条件检测
竞争条件检测 (摘抄自 GO语言圣经)
转载地址:原版: http://www.gopl.io/中文: https://book.itsfun.top/gopl-zh/
即使我们小心到不能再小心,但在并发程序中犯错还是太容易了。幸运的是,Go的runtime和工具链为我们装备了一个复杂但好用的动态分析工具,竞争检查器(the race detector)。
只要在go build,go run或者go test命令后面加上-race的flag,就会使编译器创建一个你的应用的“修改”版或者一个附带了能够记录所有运行期对共享变量访问工具的test,并且会记录下每一个读或者写共享变量的goroutine的身份信息。另外,修改版的程序会记录下所有的同步事件,比如go语句,channel操作,以及对(*sync.Mutex).Lock,(*sync.WaitGroup).Wait等等的调用。(完整的同步事件集合是在The Go Memory Model文档中有说明,该文档是和语言文档放在一起的。译注:https://golang.org/ref/mem )
竞争检查器会检查这些事件,会寻找 ...
Golang 关于变量
关于 Golang 变量的理解(摘抄自 GO语言圣经)
转载地址:原版: http://www.gopl.io/中文: https://book.itsfun.top/gopl-zh/
指针一个变量对应一个保存了变量对应类型值的内存空间。普通变量在声明语句创建时被绑定到一个变量名,比如叫x的变量,但是还有很多变量始终以表达式方式引入,例如x[i]或x.f变量。所有这些表达式一般都是读取一个变量的值,除非它们是出现在赋值语句的左边,这种时候是给对应变量赋予一个新的值。
一个指针的值是另一个变量的地址。一个指针对应变量在内存中的存储位置。并不是每一个值都会有一个内存地址,但是对于每一个变量必然有对应的内存地址。通过指针,我们可以直接读或更新对应变量的值,而不需要知道该变量的名字(如果变量有名字的话)。
如果用“var x int”声明语句声明一个x变量,那么&x表达式(取x变量的内存地址)将产生一个指向该整数变量的指针,指针对应的数据类型是*int,指针被称之为“指向int类型的指针”。如果指针名字为p,那么可以说“p指针指向变量x”,或者说“p指针保存了x变量的内存地址”。 ...
FFmpeg Tutorial
FFmpeg_TutorialFFmpeg工具和sdk库的使用demogithub link (https://github.com/MagicConch17/FFmpeg_Tutorial)[https://github.com/MagicConch17/FFmpeg_Tutorial]
一、使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑1、基本介绍对于每一个从事音视频技术开发的工程师,想必没有一个人对FFmpeg这个名称感到陌生。FFmpeg是一套非常知名的音视频处理的开源工具,它包含了开发完成的工具软件、封装好的函数库以及源代码供我们按需使用。FFmpeg提供了非常强大的功能,可以完成音视频的编码、解码、转码、视频采集、后处理(抓图、水印、封装/解封装、格式转换等),还有流媒体服务等诸多功能,可以说涵盖了音视频开发中绝大多数的领域。原生的FFmpeg是在Linux环境下开发的,但是通过各种方法(比如交叉编译等)可以使它运行在多种平台环境上,具有比较好的可移植性。
FFmpeg项目的官方网址为:https://ffmpeg.org/。在它的官网上我们可以找到许多非 ...
关于php 编译安装 遇到的坑总结
关于php 编译安装 遇到的坑总结
每一次记录都是成长的过程
因为公司服务器问题,我们临时打算将测试环境的php 环境 先升级到 7.0 左右 ,然后我就接下了这个坑。
我的系统环境:
123456DISTRIB_ID=UbuntuDISTRIB_RELEASE=14.04DISTRIB_CODENAME=trustyDISTRIB_DESCRIPTION="Ubuntu 14.04.6 LTS"Linux iZbp13psr6fb9tfovzicnmZ 3.2.0-126-generic #169-Ubuntu SMP Fri Mar 31 14:15:21 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
话不多说,首先贴出我这次遇到的问题
问题一:
1configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
问题二:1E: Unable to locate package libxslt ...
docker 命令笔记
docker简介(docker 命令笔记)为什么要使用docker简单粗暴的一句话,docker已经实现了在linux 容器化技术上,达到‘任何时间、任何地点’可以一键部署等完美操作,当然,这只是docker的 一部分骚操作
更快速的交付和部署
更高效的资源利用
更轻松的迁移和扩展
更简单的更新和管理
docker 核心概念docker 大部分的操作都围绕这它的三大核心概念:镜像、容器和仓库。因此、这三大概念也尤为重要
安装docker
官方教程:https://docs.docker.com/install/linux/docker-ce/centos/
使用docker镜像镜像是docker 三大核心概念中最重要的
docker 运行容器前需要本地存在对应的镜像,如果镜像不存在,docker 会尝试先从默认镜像仓库下载(默认使用docker hub 公共注册服务器中的仓库)
如果你的服务器在国外(香港也算 台湾也算,非大陆)推荐docker hub
如果在国内 推荐阿里云的镜像仓库 地址:请自行百度
命令格式docker [image] pull1docker [im ...
初识 Swing
初识 Swing什么是Swing?Swing 是一个为Java设计的GUI工具包。
Swing是JAVA基础类的一部分。
Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。
Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意面板。轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。
Swing 和 AWTAWT(Abstract Window Toolkit,抽象窗口工具)是一套早期的 Java GUI 开发工具,Swing 也是在 AWT 的基础上发展起来的。
AWT 的初衷是用来开发小型的图形界面程序,提供的功能较少,诸如剪切板、打印支持、键盘导航、弹出式菜单、滚动窗格等很多重要的功能在 AWT 中都不具备;此外,AWT 发生错误的几率也很高
Java 官方看到了 AWT 的不 ...