【随笔记】匿名函数
简单了解一下什么是匿名函数,以及匿名函数跟一般函数的区别。
匿名函数,顾名思义,就是没有名字的函数,匿名函数可以作为参数传递给另一个函数,也可以作为返回值返回。我们可以通过表达式赋值给变量来使用,也可以当作参数被调用,还可以通过函数嵌套当成闭包里的返回函数来调用,甚至可以自己调用自己,总的来说,匿名函数不能像一般函数那样直接定义使用,只能是被调用或是子调用。在许多编程语言中,匿名函数都有自己的实现方式。
例如,在Python中,匿名函数可以使用lambda关键字来定义:
1234add = lambda x, y; x + yprint(add(3, 4))#输出 : 7
在C++中,匿名函数可以使用std::function来定义:
1234std::function<int(int, int)> add = [](int x, int y) { return x + y; };std::cout << add(3, 4) << std::endl;//输出 : 7
在Java中,匿名函数可以使用Lamb ...
【随笔记】闭包
简单了解一下什么是闭包,如何使用和释放。
一、什么是闭包? 闭包(Closure)是一个函数,它可以访问并使用其外部环境中的变量,即使这些变量已经不再存在于当前的作用域中。
闭包的基本特征:
函数内嵌函数:闭包通常是由一个函数内嵌另一个函数组成的。
外部环境访问:内嵌函数可以访问外部函数的变量,即使外部函数已经返回。
变量绑定:内嵌函数可以绑定外部函数的变量,使得这些变量在内嵌函数中保持有效。
闭包的优点是:
可以实现函数的柯里化、装饰器、惰性求值等高级编程技巧。
可以实现函数的私有化,避免了全局变量的污染。
可以实现函数的缓存,避免了重复计算。
闭包的缺点是:
可能会导致内存泄漏,因为闭包会保留对其外部环境的引用,从而导致无法释放。
可能会导致代码的可读性降低,因为闭包会使得代码难以理解。
闭包的作用: 封装数据: 闭包可以将数据封装在函数内部,使得这些数据不被外部访问。 实现函数工厂: 闭包可以用于创建函数工厂,生成具体特定行为的函数。 实现回调函数:闭包可以用于实现回调函数,允许函数在特定时刻被调用。
二、如何使用闭包?闭包可以通过函数嵌套来实现,例如:
1 ...
Unity UGUI渲染3D对象
Unity UGUI渲染3D对象
在3D游戏里,我们经常可以看到将角色、道具物品等3D对象渲染到UI上的情况,例如MMORPG中角色的展示,FPS游戏中的枪匠系统等。但UI一般都是2D的,接下来就给大家介绍一下在UGUI中是如何实现将3D物体渲染到界面上的。
一、简介目前主流的两种实现方法:
方法一:将3D对象渲染到RenderTexture(简称RT)上,再将RT设置在RawImage上。
方法二:将3D内容直接挂在界面节点下,通过UI Camera直接渲染。
需要注意的是,在我们使用方法一的时候通常会遇到在渲染半透明的物体或者使用Additivce(透明混合模式)方式混合的物体时,会出现渲染颜色混合错误的问题。在我们使用方法二的时候,因为3D对象不是UI组件,所以我们需要特殊处理以保证UI与3D对象的前后遮挡关系,并且因为3D对象并不受UI裁剪组件Mask和RectMask2D的影响,所以也需要特殊的手段来实现3D对象被UI裁剪组件的的裁剪,而且,因为3D对象是直接挂在UI下通过UI Camera渲染的,而UI Camera一般都是正交相机,所以当我们对展示的3D对象使用 ...
【随笔记】取余运算的意义
一、取余运算的意义大家对取余操作应该不陌生,在很多编程语言里整型类型数据做除法的时候只能得到小数点前的整数部分,例如C、C++、C#等,所以我们用取余的方式获取小数点后的值。那么,除此之外,取余的意义是什么?我们为什么要做取余的操作呢?前两天看见群友在问[leetcode的1652题,题目的大致内容就是将一个数组中的每一位都用其他几位相加而来,具体几位则有常量k值决定,这里的取余是为了获取新组成的数组的下标值。解题如下:
1234567891011121314151617public class Solution { public int[] Decrypt(int[] code, int k) { int _len = code.Length; int[] _res = new int[_len]; int _dic = k >= 0 ? k == 0 ? 0 : 1 : -1; for(int i = 0; i < _len; i++) { i ...
【随笔记】new和malloc的区别
随笔记系列是记录一些偶然看见或被问到的一些印象深刻或经典的面试题,既然不聪明,那就只能靠积累,勤能补拙。如果有错误的地方,还请指出,谢谢!!!
前言 前两天,我的老大临时抽查了一下我“new和malloc的区别,给你20秒”,我“… …(20秒)”,“你挂了”。说实话,malloc我就不知道是个啥,而且,对于new,我除了知道它可以用来实例化,我也没有了解过它具体是什么,就是“知其然,不知其所以然”。
痛定思痛后,我觉得开启这个【随笔记】系列,及时整理老大提出的问题,扩充自己的知识体系。下面,让我们言归正传!
一、什么是malloc? malloc 的全称是 memory allocation(动态内存分配),用于申请一块连续的指定大小的内存块区域,以 void* 类型返回分配的内存区域地址。如果分配成功,则返回指向被分配内存的指针,否则返回空指针NULL,当内存不在使用时,应使用free()函数将内存块释放。 malloc 函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表的功能,调用 malloc 函数时,它沿连接表寻找一个大到足以满足用户请求所需 ...
《Cpp primer》 笔记
C++真有趣(狗头)
C++入门
基础知识一、简单的C++程序
必须有一个命名为 main 的函数,用于系统运行C++程序,其返回值必须为 int
函数的定义:返回类型、函数名、形参列表(可以为空)、函数体 1234int main(){ return 0;}
int 类型是一种内置类型,即语言自身定义的类型
C++ 是需要以 分号(;)作为结尾的
istream:输入流
ostream:输出流
流:一个流就是一个字符序列,是从IO设备读出或写入IO设备的,想表达随着时间的推移,字符是顺序生产或消耗的。
缓冲区(buffer):一个存储区域,用于保存数据。IO设施通常将输入(或输出)数据保存在一个缓冲区中,读写缓冲区的动作与程序中的动作是无关的。我们可以显式地刷新输出设备。默认情况下,读 cin 会刷新 cout;程序非正常终止时也会刷新 cout
4个标准库定义的IO对象
cin:标准输入,istream类型
cout:标准输出,ostream类型
cerr & clog:标准错误,ostream类型,写到 cerr 的数据是不缓冲的
一个简单的IO ...
Python 笔记
这篇笔记是看《Python编程从入门到实践》的基础部分时记录的,主要是一些常见的知识点,奈何自己脑子不好使,只能烂笔头弥补一下,可以当做自己的知识点查询工具,后续应该还会继续更新,会不会另起一篇就好说啦~总之,如果有错误的地方,还请指出,谢谢!!!
字符操作string.title():将字符串的第一个字符变成大写
string.upper():将字符串全部变成大写
string.lower():将字符串全部变成小写
pring():打印
Python使用加号(+)来合并字符串
制表符:\t —> print(“\tpython”)
换行符:\n
string.lstrip():删除字符串前的空格
string.rstrip():删除字符串后的空格
单引号间不能单独加一个单引号,会报错,Python不能识别
双引号间可以加一个单引号,不会报错,Python能识别
两个乘号表示乘方运算:3**3⇒27
空格不影响计算表达式的方式
浮点数运算结果包含的小数位数是不确定的
str():可以将非字符串表示为字符串的函数
python2中除法会将小数部分直接删除,保留整数
pyt ...
Git 笔记
这篇笔记是我学习廖雪峰大佬写的Git入门指南时候做的笔记,基本上就是将文章中使用到的 Git 指令记下来,包括了用法和拓展的说明。如果有错误的地方,还请指出,谢谢!!!
简单介绍
Git 是分布式版本控制系统
执行提交时,系统会要求输入提交信息。
创建一个本地仓库及基本操作
创建一个版本库
12345$ mkdir 库名 #创建库$ cd 库名 #进入库$ pwd #打印出当前库的位置$ git init #将这个目录变成Git可以管理的仓库$ ls -ah #显示隐藏的.git目录线
把文件添加到版本库
12$ git add 文件名.后缀 #将文件添加到仓库$ git commit -m "提交的说明" #将文件提交到仓库
查看仓库状态
12$ git status #返回内容会告诉我们仓库的变化$ git diff 文件名 #显示出文件变化的内容
查看提交日志
12$ git log #显示从近到远的提交日志$ git log --pretty=oneline #简化显示内容
版本回退
12345$ git reset --hard HEAD^ #回 ...