项目笔记

rm -rf * 删除当前目录下的所有文件。

rm:删除命令

-r开关:递归地删除子目录和子目录中的文件

-f开关:强制删除,不再一一向用户提示确认

  • 所有文件和文件夹

这条命令的意思就是强制删除当前目录下的所有文件和子目录。使用rm命令要小心。因为一旦文件被删除,它是不能被恢复的。

因此平时操作的过程中要养成良好的习惯,尽量不要用rm命令,可以用mv命令来代替。比如要删掉a.txt,可以执行mv a.txt /mytemp ,然后再写个脚本定时清除/mytemp目录下的文件,这样会安全很多。
2018.11.5

并发和并行是不一样的
并发是轮流执行,外界开来想是同时执行一样
并行就是程序层面上的同时执行

chmod +x sssjserver
\HH-UBT-16

1、常规删除a.txt文件

[root]# rm a.txt

before.txt是修改之前文件名

after.txt是准备修改的文件名

用mv指令就可以修改

mv before.txt after.txt
2018.9.19

当控制台出现很多错误哦时候,正确的方式是看第一条错误

应该以数据为中心,不可以控件为中心,否则就可能出错

LocalToGlobal(target) 从相对于当前的坐标转化到相对于窗口(整个软件窗口)的坐标
GlobalToLocal(x, y) 从相对于窗口(整个软件窗口)的坐标转换到相对于当前控件的坐标

逻辑数据 存放在json中的数据,并非实际上所表现出来的数据
实际数据 实际在控件中所表现出来的数据,长度和宽度

逻辑父控件 _logic_parent 逻辑上的父控件 就是实际的父控件
显示父控件 _show_parent 对外面所表现出来的父控件,不一定是真实父控件

CalcRealWidthCutting() CalcRealHeightCutting() 控件在布局中的位置

local x = g_RenderSystem:GetCursorPositionX() - g_RenderSystem:GetViewPositionX()
g_RenderSystem:GetCursorPositionX()光标在Windows窗口中的坐标,g_RenderSystem:GetViewPositionX()光标在软件视图中的坐标

self._offset_rate = self._bar_button.y / (self._center_size - self._show_size)
y轴的坐标除以(中间的大小减去显示的大小)

self._offset_step 指的是步长,点击一下up或是down是移动的百分长

event.delta_y 表示末位置坐标减去初始位置坐标
linear_x, linear_y = self._linear:LocalToGlobal()就是该控件(self._linear)相对于窗口的坐标
而event.abs_x和event.abs_y是事件触发的一瞬间相对于窗口的坐标

调用父类的AddChild()函数
self._scroll_view = DisplayView()
DisplayGroup.AddChild(self, self._scroll_view)

调用自己的AddChild()函数
self._scroll_content = DisplayGroup()
self._scroll_view:AddChild(self._scroll_content)

ScrollScreen中的容器中的子控件坐标是以ScrollScreen为基准的,不是以窗口为准的。

self._listeners是一个table,k是指事件类型,像
DRAG = “EventTypes_drag”, – type, target, delta_x, delta_y, abs_x, abs_y
DRAGBEGIN = “EventTypes_dragbegin”, – type, target, delta_x, delta_y, abs_x, abs_y
DRAGEND = “EventTypes_dragend”, – type, target, delta_x, delta_y, abs_x, abs_y
后面这种类型的(EventTypes_drag,EventTypes_dragbegin,EventTypes_dragend)。
其中v又是一个table,这个table中的value是事件类型(回调函数名,是函数名,字符串类型),就是点击按钮所触发的事件类型。而其中key又是一个table,指的是一个self(逻辑对象),这个table的key和value是json中的属性和值,像
“x_value” : 750, “x_type” : “POS_ALIGN_ENDING”, “text”: “来源”, “y_value” : 10
self._listeners = {} 逻辑对象和与他们回调函数的关系,例如:self._listeners = {self,callback}

self[v.visible_func](self, event.target.user_data)
self._callback_object[self._callback_func](self._callback_object, user_data.info)
该写法的具体含义了解清楚
self._callback_object为逻辑对象,self._callback_func为函数名,是个字符串,self._callback_object[self._callback_func]就是变成执行一个函数,后面括号中的就是这个函数的参数

pairs是用来遍历表的
ipairs是用来遍历数组的

是否重现
定位范围
打log

os.time()是字符串形式的年月日string
os.date()是标准形式的年月日date

msg后面的点必须符合变量名规则的,不符合的话只能用中括号
msg.content = true
msg[content[1]] = true

g_LoopSystem:RemoveUpdater(self._loop_time)
self._loop_time= ALittle.LoopFunction(Function, 100, 44000, 1)
g_LoopSystem:AddUpdater(self._loop_time)
计时器,首先是把之前的计时器清除掉,然后开始计时,Function为计时中所发生的动作,100代表Function所执行的次数(-1代表无数次)44000代表每次执行Funcion所间隔的时间,1延迟执行的时间
接着把计时器置为true,开始执行

Utility_Join(list, con)将table(list)按con(字符)连接成字符串
print(string.find(“haha”, ‘ah’) ) ----- 输出 2 3

s = “[abc]”
string.sub(s, 2) <==返回"abc]"
string.sub(s, -2) <==返回"c]"
string.sub(s, 2, -2) <==返回"abc"

操作系统只能处理一些简单的事件,画画,基本的鼠标移动,鼠标左键按下,鼠标右键按下,然后操作系统将这些简单事件发给UISystem(框架的核心的一个类),UISystem经过处理,将这些简单事件复杂化,形成更多的事件,然后将这些事件转发给侦听它的对象。

4.10 自己的一个个小小的顺序问题的bug却造成了用户的投诉(客户用预约的却填成失败,导致客户根本找不到预约的客户),第一个开始直面商业软件的游戏规则,第一次开始体会软件在实际运用过程中的流程问题,给自己的实际教训,一定要把控好软件,做好测试问题

function UISystem:HandleKeydown(mod, sym, scancode)
中的mod是状态码,指键盘上Ctrl、Alt和Shift这些键是否按下,
sym是系统码,指的是键盘上的键所对应的系统ID,如小键盘中的“1”和功能键上的“1”是不一样的
scancode是键盘码,就是键盘上的键所对应的ID,这个小键盘中的“1”和功能键上的“1”是一样的

callback和callback()
callback回调函数名,是一个变量,是字符串类型的,callback()回调函数,是用来执行的

self._button.user_data = {}
若还要让下一个self._button.user_data.param_1的数据类型为table,则应该
self._button.user_data.param_1 = {}

一个table进行decode,它会将所有的都会decode,比如msg.content, msg.list,即使里面的content是table类型,只需一次Json.encode(msg),就可以将msg都变成字符串;同样的,反过来,将一个字符串decode,也会按数据类型进行变成table类型

当多次都用到相同的数据时,为减轻服务端的压力,要考虑用缓存来存储该数据,下次使用到数据时,若是缓存中有,则直接从缓存中取即可,不需要再次从服务端。减轻服务器的压力

一般ScrollScreen中的Container容器中若是存放Linear,一般Linear都是等长的,若是要不等长的,可以直接在lua代码中拼接界面
local layout = ALittle.DisplayLayout()
layout.width_type = ALittle.EnumTypes.SIZE_STAND
local linear_out = ALittle.Linear()
linear_out.type = ALittle.EnumTypes.TYPE_V
linear_out.width_type = ALittle.EnumTypes.SIZE_STAND

关于Functor的用法
local func = Functor(self.VisibleCallback, self, param1,param2)
func()
==> self:VisibleCallback(param1,param2))

关于unpack的用法
unpack它接受一个数组(table)作为参数,并默认从下标1开始返回数组的所有元素,
print(unpack(arrayData)); – print all the elements of the arrayData
print(unpack(arrayData, 2)); --the second param is the index of the arrayData

lua中关于table的用法
1、就是直接作为table或是数组
2、可以直接作为映射表来使用,一般使用在二维数组中
碰到双重for循环,先考虑可不可用映射表的方法

对于aaa = {}
aaa = { a = 1, b = 2, c = 3, d = 4}
aaa.a与aaa[“a”]的值都是相等的,因为aaa.a中a取得的变量名,而aaa[“a”]中的a要取该变量的最终表现类型

对于该函数
function CallCenter:OnLogin()
collectgarbage(“collect”)
for k, v in ipairs(g_CallCenter._instance_list) do
if v.OnLogin then v:OnLogin() end
end
end
v.OnLogin表示g_CallCenter._instance_list这个table中(逻辑对象也是一种table)是否存在OnLogin(也可以写成v[“OnLogin”]),这时候应该将逻辑对象当成一种table来理解,有的话则执行函数OnLogin()

关于LoopFunction()
g_LoopSystem:RemoveUpdater(self._ping_anti)
self._ping_anti = ALittle.LoopFunction(Functor(self.HandlePingRequest, self), -1, 1000, 1)
g_LoopSystem:AddUpdater(self._ping_anti)
首先要把之前的self._ping_anti(相当于一个动画)给移除掉,然后创建动画,然后添加动画到LoopSystem中
LoopFuntion第一个参数是回调函数,第二个是执行的次数(-1为无数次),第三个为间隔的时间(单位为毫秒),第四个为延迟的时间(单位为毫秒)

关于函数携带的参数
g_NetSystem:PingRequest(self._ping_ip, 1000, Functor(self.HandlePingResult, self,param ))其中的Functor中是可以携带参数的(param),而实现该函数时,该参数要写在第一位HandlePingResult(param,…)

关于LoopLinear()
self._lamp_loop_list:AddUpdater(ALittle.LoopLinear(self._lamp_modal, “x”, 184, 2000, 0))
self._lamp_loop_list:AddUpdater(ALittle.LoopLinear(self._lamp_modal, “alpha”, 0, 1500, 2000))
第一个参数是操作的控件,第二个参数是操作的控件属性,第三个参数是变化的范围,第四个参数是操作


lua正则表达式

Lua支持的所有字符类:
. 任意字符
%a 字母
%c 控制字符
%d 数字
%l 小写字母
%p 标点字符
%s 空白符
%u 大写字母
%w 字母和数字
%x 十六进制数字
%z 代表0的字符

Lua中的模式修饰符有四个:

  •  匹配前一字符1次或多次
    
  •  匹配前一字符0次或多次
    
  •  匹配前一字符0次或多次
    

? 匹配前一字符0次或1次

string.find(str, “(%d+)”, index) 第一个参数是要操作的字符串,第二个参数是要匹配的模式串(这里是指0-9的数字),第三个参数是指从第几个开始查找的

lua中的表示补集可以大写字母或是^字符形式(要记得用中括号[])
number = “0591-23117971”
aa1 = string.gsub(number, “%D+”, “”)
aa = string.gsub(number, “[^%d+]”, “”)
这两种结果是一样的


关于lua中的元表

在我们访问(取值) table 的不存在的域时,Lua 会尝试调用 __index方法,__index metamethod 接受两个参数 table 和 key:(这是访问)比如(mt.a,mt.a()等,rawget是为了绕过__index而出现的,直接点,就是让__index方法的重写无效。(我这里用到"重写"二字,可能不太对,希望能得到纠正),就是说我若是调用rawget(a, a.xxx),在table a中并没有xxx属性,我们也不返回__index方法里的值,通俗的说就是子类和父类之间xxx,但我们不去调用父类的xxx属性,只获取子类的xxx属性,就是只在本类中寻找,不调到父类寻找
具体用法可参考:http://www.jb51.net/article/55152.htm

“callcenter_version_modal” :
{
“__extends” : “callcenter_common_dialog2”, “__link” : “g_CAASVersion:_notice_modal”,
“width_value” : 320, “height_value” : 140,
“title” : “提示”,
“__childs” :
[
{
“__extends” : “callcenter_common_textarea16_gray”,
“width_value” : 300, “height_value” : 80, “halign” : “HALIGN_CENTER”, “valign” : “VALIGN_CENTER”,
“text” : “软件更新失败,请稍后重试。”, “x_type” : “POS_ALIGN_CENTER”
},
{ “__extends” : “callcenter_common_button_oranger3”, “text” : “退出”, “x_type” : “POS_ALIGN_CENTER”, “x_value” : -60, “y_type” : “POS_ALIGN_ENDING”, “y_value” : 10, “__event” : { “CLICK” : “g_ScheduleSystem:ForceExit” } },
{ “__extends” : “callcenter_common_button_blue2”, “text” : “重试”, “x_type” : “POS_ALIGN_CENTER”, “x_value” : 60, “y_type” : “POS_ALIGN_ENDING”, “y_value” : 10, “__event” : { “CLICK” : “g_CAASVersion:HandleTryAgainClicked” } }
]
}

– 继承
local extends = rawget(info, “__extends”)
if extends then
local extends_included = rawget(info, “__extends_included”)
if extends_included ~= true then
local control = self:CreateInfo(self._name_map_info[extends])
local mt = {}
setmetatable(info, mt)
mt.__index = control
info.__extends_included = true
end
end
info的元表是mt,但在info中找不到的属性要去根表(control,最干净的,没有继承的了)去找,就是说control是info的父类
上述代码的作用就是找出每个info所对应的control,就是每个父类

如果对 table 的一个不存在的域赋值时,Lua 将检查 __newindex metamethod:(这 是赋值)
具体方法可参考:http://blog.csdn.net/tianya_lu/article/details/45171067

__index用于查询(相当于get函数),__newindex用于更新(相当于set函数)


客户导入中字段内容若是过长的话,可能导致导入失败

判断一个table是否为{},最好使用table[1] == nil 来判断,而不要使用判断table的个数

走马灯动画在移动的过程中,相应的x,y轴的值也会发生相应的变化,而下一个动画相应的x,y值应该会到原来的位置,否则会发生闪烁的现象
function CAASModal:NextLamp()
if self._lamp_list[1] == nil then
self._is_lamping = false
return
end
self._is_lamping = true

local text = self._lamp_list[1]
table.remove(self._lamp_list, 1)

--创建走马灯控件
if self._lamp_modal == nil then
	self._lamp_modal = g_ControlManager:CreateControl("callcenter_lamp_modal", self)
	self._lamp_modal.visible = false
	g_CallCenter._main_layer:AddChild(self._lamp_modal)
end

-- 创建走马灯动画
if self._lamp_loop_list == nil then
	self._lamp_loop_list = ALittle.LoopList()
	self._lamp_loop_list:AddUpdater(ALittle.LoopLinear(self._show_lamp_text, "x", 20, 1000, 0))
	self._lamp_loop_list:AddUpdater(ALittle.LoopLinear(self._show_lamp_text, "alpha", 0, 1500, 1000))
	self._lamp_loop_list:AddUpdater(ALittle.LoopFunction(Functor(self.NextLamp, self), 1, 4500, 1))

end
self._show_lamp_text.alpha = 0
self._show_lamp_text.text = text
self._show_lamp_text.x = - self._show_lamp_text.width
self._lamp_modal.width = self._show_lamp_text.width + 20

self._lamp_loop_list:SetTime(0)
self._lamp_modal:UpdateLayout()
self._show_lamp_text:UpdateLayout()
self._show_lamp_text.alpha = 1
g_LoopSystem:AddUpdater(self._lamp_loop_list)
self._lamp_modal.visible = true	

end


1、全局变量(g_开头的)
2、成员变量(self.开头的)
3、局部变量(local 定义的)

关于字符串aaa的aaa:gsub([[]]和""相同)
local str = [[1:A:3:D, b:2:5:8, 6:7?️h]]
print(str:gsub([[b]],[[c:j:1:7]]))
则输出:1:A:3:D, c:j:1:7:2:5:8, 6:7:c:j:1:7:h 2
gsub的第二个参数就是你想换掉的字符串

local target = “sssss2ddd2ffe2ee2ewwww2w”
local sep = “2”
local sep, fields = sep or “:”, {}
local pattern = “([^”…sep…"]+)"

local a = function©
table.insert(fields, c)
print©
–return “bb”
end

print(a)

local aaa = string.gsub(target, pattern, a)
print(aaa)

–target的字串符合pattern规则的情况下, 将字符串做a函数的参数传入函数(在a函数没有返回值的情况下?
–若a有返回值,则直接按正常规则替换


关于引用的一些用法

a = {}
变量a持有这张表(对象)的一个引用,但变量a不是持有这张表(对象)
b = a
变量a将这张表的引用复制一份给变量b
这是这张表所持有的引用计数就是2,变量a和变量b,这两个是相等的 a = b
若a = 1
这时变量a变为1,变量a没有再持有这张表的引用了,
所以该表的引用计数为1
c = {}
a = c
定义一张表,变量c所持有它,并将c复制一份给变量a
则该表的引用计数是2,上一张表的引用计数还是1


lua命名域的问题
lua调用一个函数,先到对于的包里面去查找,比如
module(“Browser”, package.seeall)
module(“Tool”, package.seeall)
module(“Table”, package.seeall)
这个只会在Table包中查找,若是找到直接用。要是找不到,中则到全局域_G中去查找,并不会到Tool包和Browser中查找(可能是lua中为了效率所考虑的,若本来是要调用全局域中的一个变量,而这种调用在lua中是非常常见的,则他们若是要把所有的包都遍历一遍,这可能会浪费许多的效率)。
所以lua查找一个变量、函数等直接到该包下查找,找不到到全局域_G中找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值