Lua的方法的一些特性--lua和android

学习lua不得不了解其方法或者说语法的特性,比如:
多值返回

function maximum (a)
    local mi = 1 -- maximum index
    local m = a[mi] -- maximum value
    for i,val in ipairs(a) do
        if val > m then
            mi = i
            m = val
        end
    end
return m, mi
end

print(maximum({8,10,23,12,5})) --> 23 3

可变参数

function g (a, b, ...) end
或者 function g (...) end

CALL             PARAMETERS
g(3)              a=3, b=nil, arg={n=0}
g(3, 4)          a=3, b=4, arg={n=0}
g(3, 4, 5, 8)   a=3, b=4, arg={5, 8; n=2}

尾调用

感觉类似递归,递归是调用自己,尾调用调的函数不一定是自己

感觉类似递归,递归是调用自己,尾调用调的函数不一定是自己
function foo (n)
    if n > 0 then return foo(n - 1) end
end

function f (x)
    // do something at x
    return  g(x)
end

优点:
尾调用不需要使用栈空间(自身栈控件),那么尾调用递归的层次可以无限制的,而不用担心栈溢出。

这些不是尾调用:

function f (x)
    // 不是尾调用
    g(x)
 return -- must return function
    return g(x) + 1 -- must do the addition
    return x or g(x) -- must adjust to 1 result
    return (g(x)) -- must adjust to 1 result
end
时间: 2024-08-30 09:30:54

Lua的方法的一些特性--lua和android的相关文章

cocos2dx3.0导出自定义类到lua的方法详细步骤

我写了一个用3.0的工具导出类到lua,自动生成代码的方法. 以前要导出c++类到lua,就得手动维护pkg文件,那简直就是噩梦,3.0以后就会感觉生活很轻松了. 下面我就在说下具体做法.1.安装必要的库和工具包,以及配置相关环境变量,请按照cocos2d-x-3.0rc0\tools\tolua\README.mdown说得去做,不做赘述. 2.写c++类(我测试用的是cocos2d-x-3.0rc0\tests\lua-empty-test\project\Classes\HelloWorl

Lua与C++交互初探之Lua调用C++

Lua与C++交互初探之Lua调用C++ 上一篇我们已经成功将Lua的运行环境搭建了起来,也成功在C++里调用了Lua函数.今天我来讲解一下如何在Lua里调用C++函数. Lua作为一个轻量级脚本语言,他只包含了一些必要的系统库函数,当有需要时还得自己去写.有一次我要做一个两数异或的操作发现函数库里居然没有异或运算.不得不非常苦逼的自己去写.后来接触Lua深了之后才知道将这种"缺陷"可以由C函数来弥补.但要做到这一点对于一个对C只知道if else的学生来说确实还是有不少难度. 在学习

Lua 与C/C++ 交互系列: Lua调用C/C++函数(4-1)

1.本文将继续讲解在Lua Code中调用注册的C函数.偶在学习本文知识点时,由于知识点的遗漏,在这个上面浪费了大量时间和精力.一直都没有没明白,Lua 通过面向对象的方式是如果调用注册的C函数.在Programming In Lua一书,有对这个方面的讲解.但是当时看书,就是不理解.因为在前面的章节中,有一个重要的知识点被遗漏.在Lua 元方法中,有两个特别重要的.__index 和__newindex被我遗漏.这两个元方法特别重要,对于定义和拓展Lua的机制,基本依靠这两个. 2.本文首先由

Lua 学习之基础篇七<Lua Module,Package介绍>

Lua 之Module介绍 包管理库提供了从 Lua 中加载模块的基础库. 只有一个导出函数直接放在全局环境中: [require]. 所有其它的部分都导出在表 package 中. require (modname) 加载一个模块. 这个函数首先查找 [package.loaded] 表, 检测 modname 是否被加载过. 如果被加载过,require 返回 package.loaded[modname] 中保存的值. 否则,它会为模块寻找加载器. require 遵循 [package.

java 对象的this使用 java方法中参数传递特性 方法的递归

一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this  --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或者构造器中  不存在成员变量与局部变量同名的情况,可直接不写this 否则方法中或构造器中使用的就是局部变量 3.static 静态方法不能调用this,不能调用任何非static修饰的成员变量 或者方法 二.java方法中  参数传递特性 1.基本数据类型--实际是新增变量,并赋值而已   不过代

win平台下搭建cocos2dx 3.1.1 lua开发环境 VS2012+sublime text+lua 5.2.3

安装vs2012 安装python 2.7.3和环境配置 下载cocos2dx 3.1.1 用vs2012打开test项目 右键运行生成解决方案  cocos2dx3.1.1 新建lua项目 cocos2dx 3.1.1引擎目录依次找到tools cocos2d-console bin,  把cocos.py拖到在dos的command(cmd)中 然后继续输入新建项目的信息: new game -p com.test.app  -l lua 我们这就可以在屏幕中提示的路径找到新建的项目game

python 之用装饰器@property,把方法变成一个特性

# -*- coding: utf-8 -*- """ Created on Sun Nov 13 23:19:03 2016 @author: toby """ #知识点:用装饰器@property,把方法变成一个特性 class Province:     memo = 'One of China\'s 23 provinces' #静态字段          def __init__(self,name,capital,leadership

Lua 与C/C++ 交互系列: Lua调用C/C++函数(3)

1.Lua API中提供注册C函数关键在lua_pushcclouse()函数.该函数可以在Lua Code中定义C函数. 但是Lua 提供了几个常用的宏定义,用于注册C函数. 这几个宏定义为: /#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) #define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) LUALIB_API vo

localStorage和sessionStorage的使用方法和一些特性介绍

本文主要介绍的是localStorage和sessionStorage的使用方法和一些特性,以及一些其他的存储方式的比较. 客服端存储方案包括以下几种: 1.Cookie 2.UserData 3.Flash SharedObject 4.Google Gears 5.Web SQL Database 6.WebStorage 7.IndexedDB(Indexed Database) 把Cookie抛开,以上几种存储方案2-5不建议使用,原因见下文详解.把Cookie抛开不论,是因为它是不可缺