main函数

C#和Java的闭包-Jon谈《The Beauty of Closures》(转)

我的梦境 提交于 2020-03-02 02:48:38
原文: http://csharpindepth.com/Articles/Chapter5/Closures.aspx 第一段略。。。 大多数讲闭包的文章都是说函数式语言,因为它们往往对闭包的支持最完善。当你在使用函数式语言时,很可能已经清楚了解了什么是闭包,所以我想写一篇在经典OO语言出现的闭包有什么用处应该也是很合适的事情。这篇文章我准备讲一下C#(1、2、3)和JAVA(7以前版本)的闭包。 什么是闭包? 简单来讲,闭包允许你将一些行为封装,将它像一个对象一样传来递去,而且它依然能够访问到原来第一次声明时的上下文。这样可以使控制结构、逻辑操作等从调用细节中分离出来。访问原来上下文的能力是闭包区别一般对象的重要特征,尽管在实现上只是多了一些编译器技巧。 利用例子来观察闭包的好处(和实现)会比较容易, 下面大部份内容我会使用一个单一的例子来进行讲解。例子会有JAVA和C#(不同版本)来说明不同的实现。所有的代码可以 点这里下载 。 需求场景:过滤列表 按一定条件过滤某个列表是很常见的需求。虽然写几行代码遍历一下列表,把满足条件的元素挑出来放到新列表的“内联”方式很容易满足需求,但把判断逻辑提取出来还是比较优雅的做法。唯一的难点就是如何封装“判定一个元素是否符合条件”逻辑,闭包正好可以解决这个问题。 虽然我上面说了“过滤”这个词,但它可能会有两个截然不同的意思

C++ 第3章 函数

非 Y 不嫁゛ 提交于 2020-03-01 21:01:07
3.1 函数的定义与使用 3.1.1 函数的定义 函数是面向对象程序设计中,对功能的抽象 类型标识符 函数名(形式参数表) { 语句序列 } 3.1.2 函数的调用 调用前先声明函数原型: 类型标识符 被调用函数名 (含类型说明的形参表); 调用形式 函数名(实参列表) 嵌套调用:函数可以嵌套调用,但不允许嵌套定义。 递归调用:函数直接或间接调用自身 例: #include <iostream> using namespace std; //计算x的n次方 double power (double x, int n); void main(void) { cout << "5 to the power 2 is "<< power(5,2) << endl; } double power (double x, int n) { double val = 1.0; while (n--) val = val*x; return(val); } 运行结果:5 to the power 2 is 25 由于函数power 的定义位于调用之后,所以需要先对函数原型加以声明。 例: 输入一个8位二进制数,将其转换为十进制数输出。1101 2 = 1(2 3 ) + 1(2 2 ) + 0(2 1 ) + 1(2 0 ) = 13 10 所以,如果输入1101,则应输出13 #include

go package学习——regexp

隐身守侯 提交于 2020-03-01 20:46:08
package regexp实现了正则表达式的搜索。 Index func Match(pattern string, b []byte) (matched bool, err error) func MatchReader(pattern string, r io.RuneReader) (matched bool, err error) func MatchString(pattern string, s string) (matched bool, err error) func QuoteMeta(s string) string type Regexp func Compile(expr string) (*Regexp, error) func CompilePOSIX(expr string) (*Regexp, error) func MustCompile(str string) *Regexp func MustCompilePOSIX(str string) *Regexp func (re *Regexp) Expand(dst []byte, template []byte, src []byte, match []int) []byte func (re *Regexp) ExpandString(dst []byte, template string,

GO语言的包

北城以北 提交于 2020-03-01 20:25:37
包介绍 包(package)是多个Go源码的集合,go语言有很多 内置包,比如fmt,os,io 等。 定义包 main包是一个可执行的包,只应用程序的入口包,编译完会生成一个可执行文件。 包名可以不和文件夹的名字一样, 包名不能包含-符号 。 package 包名 可见性:名称变量以大写字母开始,包外可以调用,相当于java的public 全局变量; 函数 结构体(struct);     接口(interface) 结构体的属性; 结构体的 方法; 接口 体的 方法; 不可见: 名称变量以小写字母开始,包外可以调用,相当于java的private 函数内的 局部变量 不管是否大写包外都不可见, 如果想在一个包中引用另外一个包里的标识符(如 变量、常量、类型、函数 等)时,该标识符必须是对外可见的(public)。在Go语言中只需要将标识符的首字母大写就可以。 // 首字母小写,外部包不可见,只能在当前包内使用 var num = 10 //首字母大写外部包可见,可在其他包中使用 const Name = "ares" //全局变量 // 首字母小写,外部包不可见,只能在当前包内使用 type person struct { name string } type Student struct { //结构体 Name string //属性 class string /

C++异常处理(throw try catch)

試著忘記壹切 提交于 2020-03-01 16:37:11
本篇转自 http://c.biancheng.net/view/422.html 程序运行时常会碰到一些异常情况,例如: 做除法的时候除数为 0; 用户输入年龄时输入了一个负数; 用 new 运算符动态分配空间时,空间不够导致无法分配; 访问数组元素时,下标越界;打开文件读取时,文件不存在。 这些异常情况,如果不能发现并加以处理,很可能会导致程序崩溃。 所谓“处理”,可以是给出错误提示信息,然后让程序沿一条不会出错的路径继续执行;也可能是不得不结束程序,但在结束前做一些必要的工作,如将内存中的数据写入文件、关闭打开的文件、释放动态分配的内存空间等。 一发现异常情况就立即处理未必妥当,因为在一个函数执行过程中发生的异常,在有的情况下由该函数的调用者决定如何处理更加合适。尤其像库函数这类提供给程序员调用,用以完成与具体应用无关的通用功能的函数,执行过程中贸然对异常进行处理,未必符合调用它的程序的需要。 此外,将异常分散在各处进行处理不利于代码的维护,尤其是对于在不同地方发生的同一种异常,都要编写相同的处理代码也是一种不必要的重复和冗余。如果能在发生各种异常时让程序都执行到同一个地方,这个地方能够对异常进行集中处理,则程序就会更容易编写、维护。 鉴于上述原因,C++ 引入了异常处理机制。其基本思想是:函数 A 在执行过程中发现异常时可以不加处理,而只是“拋出一个异常”给 A 的调用者

gcc生成静态库和动态库

依然范特西╮ 提交于 2020-03-01 08:03:34
gcc生成静态库和动态库 一、库文件简介 简单地说,库(Library)就是一组已经写好了的函数和变量、经过编译代 码,是为了能够提高开发效率和运行效率而设计的。库分为静态库(Static Library)和共享库(Shared library)两类。 静态库文件的扩展名是.a,共享库文件的扩展名是.so (在CYGWIN环境下,分别叫做.o和.dll)。共享库现在常常被叫做 动态库,是由于很多人借用了MS Windows的DLL(Dynamic Linked Library)这个词。 (1)静态库 静态是指每个用到该库的应用程序都拥有一份自己的库拷贝;应用程序运行的时候,即使将库删除也没有问题,因为应用程序自己已经有了自己的拷贝。 (2) 共享库 一个共享库有可能被多个所有应用程序共享。因此,对每个应用程序来说,即使不再使用某个共享库,也不应将其删除。此外,应用程序需要正确的环境变量设置 (LD_LIBRARY_PATH),从而找到共享库所在的位置,否则,应用程序运行时会报告找不到这个库。 二、关于使用库的问题 如果库是已经编译好的,那么如何在开发、运行应用程序时使用呢?头文件和库文件所在的路径,必须通过适当的方式通知给编译器、链接器和相关的应用程序。 对于静态库来说,主要涉及开发工具,如gcc。例如,用gcc编译、链接时,需要通过适当的路径找到头文件和静态库文件;

04. Dart - Functions

你离开我真会死。 提交于 2020-03-01 01:15:05
个人学习用 不严谨 学习的话请看别的博客 可选参数 void main(){ /** * 可选参数分为: * 可选命名参数 * 可选位置参数 * * 函数也是对象并且类型为Function,这意味着函数可以被赋值给变量或者其他函数的参数 * */ List list = [1,2,3]; bool isNoNull(int i){ return list[i] != null; } print(isNoNull(2)); //简化表达式 bool isNoNullSimple(int i) => list[i] !=null; print(isNoNullSimple(1)); } 可选命名参数 void main() { /** * 当调用函数的时候可以使用 参数名: 参数值 的形式来指定命名参数 * 可以使用 @required 注解来标识一个命名参数是必须的参数 */ /** * 定义 - 可选命名参数 * 大括号包裹 */ void showText({String s, bool b}) { if (b) { print(s); } } /** * 调用 - 可选命名参数 * 键值对形式,键是定义时候的参数名称 */ showText(s: "123", b: true); showText(s: "123", b: false); } 可选位置参数 void main(

Python 关于 name main的使用

馋奶兔 提交于 2020-02-29 10:26:41
__name__: 在使用自身的时候,就是main,比如你执行: python test.py 此时在test.py里面的name就是main 如果你在test2中import test,那么name就是文件名 http://www.cnblogs.com/herbert/archive/2011/09/27/2193482.html 看过很多python的code都有这段代码: if __name__ == '__main__' : 这段代码的主要作用主要是让该python文件既可以独立运行,也可以当做模块导入到其他文件。当导入到其他的脚本文件的时候,该main代码里面的就不执行了。 参考: http://pyfaq.infogami.com/tutor-what-is-if-name-main-for The if __name__ == "__main__": ... trick exists in Python so that our Python files can act as either reusable modules, or as standalone programs. As a toy example, let's say that we have two files: mumak:~ dyoo$ cat mymath.py def square(x):

Linux系统内核main函数执行之前

ε祈祈猫儿з 提交于 2020-02-29 09:33:43
1、linux是一个操作系统在机器加电后,需要从硬件通过一个引导程序加载os kernel,那么在os kernel的main函数运行之前,都发生了什么呢? (1)引导BIOS(存储在ROM芯片中,ROM:只读存贮器,现在一般为闪存)的启动(准备实模式下的中断向量表和中断服务程序) 实模式:Intel80x86系列的一种cpu运行模式,特点,20位地址寻址(1MB),可直接访问BIOS和周边的硬件,没有硬件支持的实时多任务和分页机制。 BIOS任务:把os 加载到RAM(随机存取存储器,也就是常见的内存条) 所有的cpu在加电时强行进入16位实模式,此时cpu的一些特殊值: CS:0xF0000,IP:0xFFF0 所以起始地址为CS:IP = 0xFFFF0也就是BIOS的地址。 CS:代码段寄存器 IP:指令指针寄存器(IP对应16位,EIP对应32位,RIP对应64位) 指令的地址:代码段其实地址+指令段内偏移地址 = CS + IP 中断向量表的位置:0x00000 ~ 0x003FF (一共1kb):一共256个中断向量(CS:IP),每个4B(CS:2B;IP:2B) BIOS数据区:0x00400 ~ 0x004FF 中断服务程序:0x0E50B ~ 0x0FFFE 中断int (2)加载第一部分kernel代码(bootsect) BIOS收到int 0x19

12月2号 Vim编辑器和main函数说明

穿精又带淫゛_ 提交于 2020-02-29 06:23:11
vim是mac系统自带的一款文本编辑器 1.使用vim创建文件(如果已经存在就直接进入这个文件)   vim printName.c 2.vim有两种模式:命令模式和编辑模式     在命令模式下输入i就可以进入编辑模式   #include导入自己定义或者系统的头文件   main函数是每一个程序的入口点   wq! 保存并退出vim编辑器 3.运行一个程序需要的所有步骤   1)预编译:将#include头文件展开   gcc -E printName.c   2)汇编:生成汇编代码 会产生一个.s的文件       这个阶段会判断代码是否正确   gcc -S printName.c   3) 编译:将汇编代码转化成目标文件(二进制文件)        就是生成电脑能够识别的机器语言        产生一个.o的文件   gcc -c printName.s   4)链接:讲所有的.o文件链接为一个可执行的文件(因为有些大的项目由很多的小的文件组成)   gcc -o outputName printName.o (一个.c文件只能生成一个.o文件)   5)运行   ./outputName PS:步骤3可以一步完成:gcc -o outputName printName.c 函数名:main函数 int main(int argc, char *argv[]{   /