Lua输入输出
由于Lua语言强调可移植性和嵌入性,所以Lua语言本身并没有提供太多与外部交互的机制。在真实的Lua程序中,从图形、数据库到网络的网络的访问等大多数I/O操作,要么游宿主程序实现,要么通过不包括在发行版中的外部库实现。单就Lua语言而言,只提供IOS C语言标准支持的功能,即基本的文件操作等。
简单I/O模型对于文件操作来说,I/O库提供了两种不同的模型。简单模型虚拟了一个当前输入流和一个当前输出流,其I/O操作时通过这些流实现的。I/O库把当前输入流初始化为进程的标准输入,将当前输出流初始化为进程的标准输出。因此,当执行类似于io.read()这样的语句时,就可以从标准输入中读取一行。函数io.input可以用于改变当前的输入输出流。调用io.input(file-name)会以只读模式打开指定文件,并将文件设置为当前输入流。之后,所有的输入都将来自该文件,除非再次调用io.input。对于输出流而言,函数io.output的逻辑与之类似。如果出现错误,这两个函数都会抛出异常。如果想直接处理这些异常,则必须使用完整I/O模型。由于函数write比函数read简单,我们首先来看函数w ...
Lua中函数的使用
在Lua语言中,函数是对语句和表达式进行抽象的主要方式。函数既可以用于完成某种特定任务,也可以只是进行一些计算然后返回计算结果。在前一种情况下,我们将一句函数调用视为一条语句;而在后一种情况下,我们则将函数调用视为表达式:
123print(8*9 , 9/8)a = math.sin(3) + math.cos(10)print(os.date())
无论哪种情况,函数调用时都需要使用一对圆括号把参数列表括起来。即使被调用的函数不需要参数,也需要一对空括号()。对于这个规则,唯一的例外就是,当函数只有一个参数且该参数是字符串常量或表构造器时:12345print "Hello World" <--> print("Hello World")dofile "a.lua" <--> dofile('a.lua')print [[a multi-line message]] <--> print([[a multi-line message]])f{ ...
Lua连续教程之Lua中表的使用
表是Lua中最主要和强大的数据结果。使用表,Lua语言可以以一种简单、统一且高效的方式表示数组、集合、记录和其他很多数据结果。Lua语言也使用表来表示包和其他对象。当调用函数math.sin时,我们可能认为是“调用了math库中函数sin”;而对于Lua语言来说,其实际含义是“以字符串sin”为键检索表math。
Lua语言中的表本质上是一种辅助数组。这种数组不仅可以使用数值作为索引,也可以使用字符串或其他任意类型的值作为索引(nil除外)。我们使用构造器表达式创建表,其最简单的形式是{}:123456789> a = {} --创建一个表然后用表的引用赋值> k = "x"> a[k] = 10 -- 新元素,键是"x",值是10> a[20] = "great" -- 新元素,键是20,值是"great"> a["x"] -- 10> k = 20> a[k] -- "great"& ...
Lua连续教程之Lua字符串
字符串用于文本。Lua语言中的字符串即可以表示单个字符,也可以表示一整本书籍。在Lua语言中,操作100K或者1M个字母组成的字符串的程序也很常见。
Lua语言中的字符串是不可变值。我们不能像在C语言中那样直接改变某个字符串中的某个字符,但是我们可以通过创建一个新的字符串的方式来达到修改的目的。例如:1234a = "one string"b = string.gsub(a,"one","another") --改变字符串中的某些部分print(a) --one stringprint(b) --another string像Lua语言中的其他对象一样,Lua语言中的字符串也是自动内存管理的对象之一。这意味着Lua语言会负责字符串的分配和释放,开发人员无须关注。可以使用长度操作符(#)获取字符串的长度:123a = "hello"print(#a) --5print(#"good bye") --8该操作符返回字符串占用的字节数,在某些编码中,这个值可能与字符串中字 ...
Lua连续教程之Lua中的数值
我们可以使用科学计数法(一个可选的十进制部分外加一个可选的十进制指数部分)书写数值常量,例如:12345> 4 --4> 0.4 --0.4> 4.57e-3 --0.00457> 0.3e12 --3.0000000000.0> 5E+20 --5e+20具有十进制小数或者指数的数值会被当做浮点型值,否则会被当做整数值。整型数和浮点数的类型都是number:123>type(3) --number>type(3.5) --number>type(3.0) --number由于整型值和浮点型值的类型都是”number”,所以它们是可以互相转换的。同时,具有相同算术值的整型值和浮点值在Lua语言中是相等的:123>1 == 1.0 --true>-3 == -3.0 --ture>0.2e3 == 200 --ture在少数情况下,当需要区分整型值和浮点型值时,可以使用函数math.type:12>math.type(3) --integer>m ...
Lua语言入门
遵照惯例,我们的第一个Lua程序时通过标准输出打印字符串”Hello World”: print("Hello World")
如果读者使用的是Lua语言独立解释器(stand-alone interpreter),要运行这第一个程序的话,直接调用解释器运行包含程序代码的文本文件就可以了。例如,如果把上述代码保存为名hello.lua的文件,那么可以通过以下命令运行:% lua hello.lua
再来看一个稍微复杂点的例子,以下代码定义了一个计算阶乘的函数,该函数先让用户输入一个数,然后打印出这个数的阶乘结果:123456789101112--定义一个计算阶乘的函数function fact(n) if n == 0 then return 1 else return n * fact(n-1) endendprint("enter a number:")a = io.read("*n") --读取一个数字print(fact(a))
1.1 程序段我们将Lua语言执行的每一段代码称为一个程序段(Chunk) ...
Lua的深拷贝和浅拷贝
今天在写游戏的时候,遇到了一个数据问题,就开始查资料
代码如下12345678910111213141516171819202122232425262728293031323334--- Deep copies a table into a new table.-- Tables used as keys are also deep copied, as are metatables-- @param orig The table to copy-- @return Returns a copy of the input tablelocal function deep_copy(orig) local copy if type(orig) == "table" then copy = {} for orig_key, orig_value in next, orig, nil do copy[deep_copy(orig_key)] = deep_copy(orig_value) end setmetat ...
git强制拉取远程项目覆盖本地项目
最近在工作中经常需要从git拉取到一些项目到本地,但是因为本地项目被我自己修改,所以无法用传统的方式将远程仓库的项目拉取下来。下面介绍一种远程仓库强制拉取项目到本地的方法。
除非必须强制,不要轻易使用。
需要将这些更新取回本地,用命令git fetch.1git fetch --all撤销本地、暂存区、版本库(用远程服务器的origin/master替换本地、暂存区、版本库)1git reset --hard origin/master
git pull来从远程仓库”同步”代码1git pull origin master或者用下面一行命令git强制覆盖本地命令(单条执行):1git fetch --all && git reset --hard origin/master && git pull
python实现微信自动聊天
闲着无聊,在网上找了一些好玩的代码,比如用Python实现微信自动回消息之前弄了一个定时自动给好友发天气或者发心灵鸡汤的脚本,下载链接:https://download.csdn.net/download/silent_f/11162951
今天这里就介绍几个微信接入图灵机器人,自动和好友聊天的脚本
1、自动和所有好友聊天,只要好友发消息来,就会给好友回复这里笔者用的是3.6版本python ,安装itchat,用下面命令1pip3 install itchat 然后去图灵机器人官网注册账号,获取一个key
具体代码:1234567891011121314151617181920212223import requestsimport itchatimport importlib,sys importlib.reload(sys)import sysdef get_response(_info): print(_info) # 从好友发过来的消息 api_url = 'http://www. ...
Lua中“.”和“:”区别
初学lua,可能会对.和:这两个符号的用法产生疑问,很多时候都会因为这个出错,这里笔者简单介绍下笔者在使用cocos2dx游戏开发中对这两者的认识
冒号的作用:定义函数时,给函数添加隐藏的第一个参数self,调用函数时,默认把当前调用者作为第一个参数传递进去。使用冒号后,就相当于我们使用了点号,只是我们不再需要显示的定义self参数以及主动低传递参数。
在cocos2dx 开发过程中,大部分时候都是使用的冒号
一般我们在定义函数时会用下面写法1function MainScene:onCreate()等同于下面写法1function MainScene.onCreate(self)
笔者个人看法,欢迎大家更正
pip问题Traceback (most recent call last)
刚刚在用pip安装ipython时,遇到了下面这个错误
笔者这里用的是python3.7.2版本
解决方案如下:打开python 的安装路径,到python3.7\Lib\site-packages\pip路径下,打开__main__.py文件,修改最后一行,将原本的sys.exit(_main()) 改为 sys.exit(_main__._main()) ,如下图
pip问题:SyntaxError:invalid syntax
今天在使用python安装ipython时出现了下面错误
解决方法很简单,退出python命令行重新输入命令:pip3 install ipython 即可