-- create a class
Animal={name = "no_name" , age=0 }
function Animal:bark(voice)
print(self.name.."in"..voice.."jiao")
end function Animal:new()
a={}
setmetatable(a,{__index=self})
return a
end
animal = Animal:new()
animal2=Animal:new()
-- print(animal)
-- print(animal2) animal.name = "Tom"
animal.age = 8
animal.type = "cat" print(animal.name.."jn"..animal.age) function animal2:skill()
return "mouse"
end print(animal2.name.."jn"..animal.age..animal2:skill()) function Animal:new (obj)
local a=obj or {}
setmetatable(a,{__index=self})
return a
end Cat =Animal:new({type="bosiCat"})
Cat.eye="blue eye"
tomcat =Cat:new()
tomcat.name="Tome"
print(tomcat.name.."is".."d"..tomcat.type)

运行结果:

Lua协同线程

lua中有一种特色的线程,称为coroutine,协同线程,简称协程。其可以在运行时暂停执行,然后转去执行其他线程,然后还可以返回再继续执行没有完毕的内容。即可以“走走停停,停停走走”

在lua中表示独立的执行线程。任意时刻只会有一个协程执行,而不会出现多个协程同时执行的情况。

-- create thread
crt=coroutine.create(
function(a,b)
print(a,b,a+b)
-- obtain running thread
tr=coroutine.running();
print(tr)
-- check type
print(type(tr))
-- check crt status
print(coroutine.status(crt))
-- coroutine pending
coroutine.yield()
print("back") end
) -- start coroutine a=3,b=5
coroutine.resume(crt,3,5)
-- check crt type
print("main-"..type(crt))
-- check crt status
print("main-"..coroutine.status(crt))
-- cancel panding math is not imporitance
coroutine.resume(crt,3,5)
-- check crt status
print("main-"..coroutine.status(crt))

运行结果:

有返回值的协同线程

--create
crt=coroutine.create(
function(a,b)
print(a,b)
c=a*b
print(c)
coroutine.yield(c,a/b)
return a+b,a-b
-- print("back")
end
) result,result1,result2 = coroutine.resume(crt,4,7)
print(result,reslut1,result2)

协同函数:

cf= coroutine.wrap(
function(a,b)
print(a,b)
return a+b,a*b
end
) success,result1,result2=cf(3,4)

结果:

Lua的IO

file= io.open("t1.lua","r")
io.input(file)
line=io.read()
print("hi")
while line ~= nil do
print(line)
line=io.read("*1")
end
io.close(file)

File操作

file= io.open("t1.lua","a")
file:write("\nlevel=p7")
file:close()

结果:

lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O的更多相关文章

  1. Lua面向对象----类、继承、多继承、单例的实现

    (本文转载)学习之用,侵权立删! 原文地址   http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&a ...

  2. 《自拍教程36》段位三_Python面向对象类

    函数只能面向过程,来回互相调用后顺序执行, 简单的编码项目,还能应付的过来, 复杂的大型项目,调用多了,就会乱. 如何才能不乱呢,可尝试下, 面向对象类的概念, 将现实世界的事物抽象成对象,将现实世界 ...

  3. Lua面向对象之二:类继承

    1.类继承 ①代码 Sharp = { } --① 父类 function Sharp:new() local new_sharp = { } self.__index = self --②,self ...

  4. Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...

  5. Lua面向对象设计

    首先对于Lua语言,它没有打算被用来进行大型的程序设计,相反,Lua目标定于小型到中型的程序设计,通常是作为大型系统的一部分,所以它只提供了一套精简的元素,很多高级语言的概念都没有.这样Lua就成为了 ...

  6. Lua面向对象编程

    Lua中的table就是一种对象,看以下一段简单的代码: , b = } , b = } local tb3 = tb1 if tb1 == tb2 then print("tb1 == t ...

  7. Lua面向对象设计(转)

    首先对于Lua语言,它没有打算被用来进行大型的程序设计,相反,Lua目标定于小型到中型的程序设计,通常是作为大型系统的一部分,所以它只提供了一套精简的元素,很多高级语言的概念都没有.这样Lua就成为了 ...

  8. Lua面向对象之三:其它一些尝试

    1.尝试一:子类对象调用被覆盖了的父类函数 根据元表设置流程,我们只有将父类元表找到就能调用父类的方法了 ①在子类Circle中增加一个调用父类方法的函数 --调用父类被子类覆盖了的name方法 fu ...

  9. Lua面向对象之一:简单例子

    1.Lua面向对象实现步骤 ①创建一个全局表(称之为元表) ②设置这个元表的__index值(值通常为元表自己,这样就能通过__index查找到对应的属性和方法) __index 赋值其实是一个fun ...

  10. lua面向对象实现(实例化对象、继承、多态、多继承、单例模式)

    lua面向对象实现: 一个类就像是一个创建对象的模具.有些面向对象语言提供了类的概念,在这些语言中每个对象都是某个特定类的实例.lua则没有类的概念,每个对象只能自定义行为和形态.不过,要在lua中模 ...

随机推荐

  1. Web通用漏洞--RCE

    Web通用漏洞--RCE 漏洞简介 RCE远程代码/命令执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. RCE漏洞也分为代码执行漏洞和命令执行漏洞,所谓代码执行 ...

  2. 5、Spring之bean的作用域和生命周期

    5.1.bean的作用域 5.1.1.单例(默认且常用) 5.1.1.1.配置bean 注意:当bean不配置scope属性时,默认是singleton(单例) <?xml version=&q ...

  3. Python条件控制和循环语句(if while for )

    Python条件控制和循环语句(if while for ) 条件控制 概念:Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块 结构 1. 顺序结构 ...

  4. 【译】IntelliJ IDEA 2023.2 最新变化——JetBrains IDE 中的 AI 助手

    前言 本周所有基于 IntelliJ 的 IDE 和 .NET 工具的 EAP 版本都包含一个主要新功能:AI Assistant.本博文重点介绍我们基于 IntelliJ 的 IDE,并且即将推出专 ...

  5. [面向对象] 魔术方法 (__set, __get, __unset, __isset)

    __set, __get,__isset, __unset 是面向对象里用来友操作的魔术方法.  先看看使用方法 echo $类->属性;  //取不存在属性或私有保护属性时,  以下方法被调用 ...

  6. 弹性数据库连接池探活策略调研(三)——DBCP

    前言 在之前的文章中,我们介绍了弹性数据库连接失效的背景,并探讨了HikariCP.Druid连接池探活策略的相关内容.在本文中,我们将会继续探讨另一个线上常用的连接池--DBCP,并为您介绍如何在使 ...

  7. 别再用 float 布局了,flex 才是未来!

    大家好,我是树哥! 前面一篇文章整体介绍了 CSS 的布局知识,其中说到 float 布局是 CSS 不断完善的副产物.而在 2023 年的今天,flex 这种布局方式才是未来!那么今天我们就来学习下 ...

  8. Python3中的printable

    import string characters = string.printable # printable 是用作字符串常量的预初始化字符串.里面包含所有的标点符号,数字 print(charac ...

  9. P8679 [蓝桥杯 2019 省 B] 填空问题 题解

    P8679 [蓝桥杯 2019 省 B] 填空问题 题解 题目传送门 欢迎大家指出错误并联系这个蒟蒻 更新日志 2023-05-25 21:02 文章完成 2023-05-27 11:34 文章通过审 ...

  10. 【PHP反序列化】速览

    PHP反序列化 一.原理 序列化就是将对象转化成字符串,反序列化相反.数据的格式转换和对象的序列化有利于对象的保存 . 反序列化漏洞:就是php对数据进行反序列化时,没有进行过滤,导致用户可以控制反序 ...