Lua 在 Android 中应用下,具体使用
转载请附原文链接: Lua 在 Android 中应用下,具体使用
一、概要在上一章节中介绍了 Android 中如何引入 Lua ,本章节主要介绍 Lua 在 Android 中的具体使用,本章节主要分为两个部分,第一部分是使用 Lua API 绘制 Android 的 View ,第二部分是介绍学习 Lua 和 Android 之间函数回调及参数传递。
二、调用 Lua 布局 Android View2.1 一些知识点储备Lua 程序一般不单独运行,标准的 Lua虚拟机 通过C语言编写的,一般是通过CC++来拓展Lua的函数,这样接口兼容速度更快。
Lua 虚拟机与 C/C++ 之间的数据交换基本都是通过 Lua 构建虚拟 栈* 来交互的,无论何时 Lua 调用 C,被调用的函数都得到一个新的栈, 这个栈独立于 C 函数本身的栈,也独立于之前的 Lua 栈。它里面包含了Lua传递给 C 函数的所有参数,而 C 函数则把要返回的结果放入这个栈以返回给调用者。即这里记住 Lua 和 C 之间的数据传递交互是通过虚拟栈进行的,主要通过数据的压栈和出栈进行,虚拟栈里面的数据模型如下:
...
Lua string 哈希碰撞
Lua 中 40 字节以下的字符串会被内部化到一张表中(Lua 5.3),这张表挂在 global state 结构下。对于短字符串,相同的串在同一虚拟机上只会存在一份,这被称为字符串的内部化。
其实字符串在 Lua VM 中是以两种内部形式保存的:短字符串及长字符串。其界限默认设置为40(字节)
对于比较长的字符串(32字节以上),为了加快哈希过程,计算字符串哈希值是跳跃进行的(并没有 hash 全部的位)。
Lua Wiki 上列出了各个版本的 Lua 对于 string 没有计算 hash 的长度:
Hash algorithm analysis
-- number of bytes not used in hash function
==============================================================
String length < 15, 15-20 , 20-32 , 32-64
-------------------------------------------- ...
Lua 学习 chapter24
目录
将协程用作迭代器
事件驱动式编程
人人真真的生活过,学习过,改变过,努力过,才能创造出一个满意的自己。
将协程用作迭代器
不断的resume来实现迭代。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
local function printResult(a)
for i = 1, #a do
io.write(a[i], " ")
end
io.write("n")
end
local function permgen(a,n)
n = n or #a
if n <= 1 then
coroutine.yield(a)
else
for i = 1, n do
a[n],a[i] = a[i],a[n]
permgen(a, n -1)
a[n],a[i] = a[i],a[n]
end
end
end
local function permutations(a) ...
lua
1.下载python2.7安装它并设置C:Python27到path环境变量中。
2.安装easy_install(可选)使用ez_setup.py进行安装下载完成后双击执行安装文件,即可在C:Python27scripts下安装easy_install添加C:Python27scripts到环境变量path中打开cmd执行下面命令:1easy_install virtualenv
安装了easy_install之后安装python的库就很简单了,以后需要安装python的库的话则直接在命令行使用easy_install + libname
3.安装Cheetah自动安装:打开cmd执行下面命令:1easy_install cheetah
手动安装:下载Cheetah.zip并解压到C:Python27Libsite-packages然后进入C:Python27Libsite-packagesCheetah目录,命令行运行: python setup.py install
4.下载PyYAML-3.12.win32-py2.7.exe并安装它。
5.下载android-ndk-r10d ...
LuaTable函数库
1234567table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j]]]) table.sort(table[, comp]) // 见Lua排序table.getn() //5.0费table.maxn() //5.2费
#####insert, remove
insert 和 remove 只能用于数组元素的插入和移出, 进行插入和移出时,会将后面的元素对齐起来。 所以在 for 循环中进行 insert 和 remove 的时候要注意插入和移除时是否漏掉了某些项: local t = {1,2,3,3,5,3,6} for i,v in ipairs(t) do if v == 3 then table.remove(t,i) end end – 错误,第四个 3 没有被移除,ipairs 内部会维护一个变量记录遍历的位置,remove 掉第三个数字 3 之后,ipairs 下一个返回的值 ...
lua 从字符串获取指定第几位数到第几位数
– 判断utf8字符byte长度
– 0xxxxxxx - 1 byte
– 110yxxxx - 192, 2 byte
– 1110yyyy - 225, 3 byte
– 11110zzz - 240, 4 byte
local function chsize(char)
if not char then
print(“not char”)
return 0
elseif char > 240 then
return 4
elseif char > 225 then
return 3
elseif char > 192 then
return 2
else
return 1
end
end
-- 计算utf8字符串字符数, 各种字符都按一个字符计算
-- 例如utf8len("1你好") => 3
function utf8len(str)
local len = 0
local curren ...
Evaluation Metrics in Recommender system
简介在实际的科研中,几乎大多数的实验都是离线测试的。而在推荐系统方向有这样几个评估指标被广泛的使用:Precision、Recall、MAP、而我们这篇文章将对这些评估指标进行详细的介绍。
Precision-准确率Recall-召回率MAP(Mean Average Precision)-平均精度均值
LeetCode 399. Evaluate Division
题目描述给出方程式 A / B = k, 其中 A 和 B 均为代表字符串的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。
输入总是有效的。你可以假设除法运算中不会出现除数为0的情况,且不存在任何矛盾的结果。
tagDFS BFS 图 并查集
样例123456789101112示例 :给定 a / b = 2.0, b / c = 3.0问题: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? 返回 [6.0, 0.5, -1.0, 1.0, -1.0 ]输入为: vector<pair<string, string>> equations, vector<double>& values, vector<pair<string, string>> queries(方程式,方程式结果,问题方程式), 其中 equations.size() == values.size(),即方程式的长度与方程式结果长度相等 ...
lua学习之元表和元方法
学习lua也有大概一年了,对lua的一些基本的语法很熟练了,也做了一些简单的业务,但是对于lua的高级特性还是不是很熟,最近有时间得以系统的学习学习。本文主要讲述的是lua高级特性之一的元表和元方法。
文字简述
metatable(元表) 本质上来讲元表也是一个表,不过这个表是用来定义对lua的值进行自定义运算行为的地方。
metamethod(元方法) 本质上来讲就是一个lua函数,不过这个函数是用来绑定lua中特定的值,这些特定的值可以称为事件。这个函数我们可以进行我们一些自定义的操作。
元表之中的事件其实是一些定义的值,这些值后面会讲到;实际上我们只能对lua中table类型的值进行修改元表和元方法的操作,其它的一些例如number, string等都已经有自己内置的元表和元方法,且不可改变。
通过元表和元方法,我们可以实现lua的面向对象编程。
代码讲解api 介绍简单的介绍一下会用到的api。
setmetatable(table, metatable) 设置table的元表为metatable并且返回这个table。不能为除table类型之外的值设置元表,如果 ...
Programming in Lua(Thrid Edition)笔记
15 Modules and Packages
从用户的角度来看,一个module是一些可以用require()加载的代码(Lua或者C),它可以创造并返回一个table,module输出的一切,例如函数和常量,都定义在这个table中,相当与一个namespace。所有的标准库都是module,可以像下面这样来用数学库:12local m = requre "math"print(sin(3.14))
独立的解析器以类似于下面的方式预加载了所有的标准库:123math = require "math"string = require "math"...
module的几种用法:
12345678910local mod = rquire "mod"mod.foo()-- usage 2local m = require "mod"m.foo()-- usage 3local m = require "mod"local f = mod.foof()
require不能对加载的mo ...