Function is a data type in Lua

在Lua中, 我们用到的函数, 其实是一个数据类型, 例如 : 

[root@db-172-16-3-150 ~]# lua
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> print(type(print))
function
> print(type(function() end))
function
> print(type({}))
table
> print(type("hello"))
string
> print(type(1.2))
number

函数的定义构造器function () end, 和表的构造器{}一样. 都只是个构造器.

所以函数可以存储在变量中, 本地变量或者全局变量或者表的元素中都可以. 因此函数的定义实际上是匿名的, 如果没有赋值的过程.

function (x)
  return x*2
end

这其实是个匿名函数.

赋值给一个变量的写法 :

double =
function (x)
  return x*2
end
或者
function double (x)
  return x*2
end

同时, 系统自定义的函数变量, 也可以被覆盖: 例如, print函数.

> print = function() end
> print("hello")

函数还可以作为返回值, 例如 : 

function derivative(f, delta)
  delta = delta or 1e-4
  return function (x)
           return ( f(x+delta) - f(x) ) / delta
         end
end
这个函数的返回值为一个匿名函数,
function (x)
           return ( f(x+delta) - f(x) ) / delta
end
所以如下表达式是把这个匿名函数赋予给一个变量.
c = derivative(math.sin)
即
c = function (x)
  return ( math.sin(x+delta) - math.sin(x) ) / 1e-4
end
例子 :
> = c(1)
0.54026023141862

把函数存储在一个表的元素中的例子 : 

> arr = {}
> arr.x = c
> arr.x(1)
> = arr.x(1)
0.54026023141862
时间: 2024-11-08 22:35:57

Function is a data type in Lua的相关文章

【COCOS2DX-LUA 脚本开发之十三】解决COCOS2DX-LUA编译到ANDROID找不到CCLUAENGINE、HELLOWORLD或出现GET DATA FROM FILE(XXX.LUA) FAILED/CAN NOT GET FILE DATA OF XXX.LUA、COCOS2DX

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/lua-game/1368.html 对于跨平台整合,Himi已经写了1.x 与 2.x 的了,还不知道如何整合的请移步到 [Cocos2d-X(2.x) 游戏开发系列之二]cocos2dx最新2.x版本跨平台整合NDK+Xcode,Xcode编写&编译代码,Android导入打包运行即可!) 本篇只是解决在整合cocos2dx-lua项目会

linux-fstat 读取3g大文件,获取文件大小错误显示Value too large for define data type

问题描述 fstat 读取3g大文件,获取文件大小错误显示Value too large for define data type fstat 读取3g大文件,获取文件大小错误显示Value too large for define data type 解决方案 提示信息:需要定义更大的数据类型呀. 解决方案二: Value too large for defined data typegcc 编译错误 Value too large for defined data typereaddir 报

Linux C double linked for any data type

/************************************************************************** * Linux C double linked for any data type * 声明: * 提供一种双链接口,可以保存保存任何类型的数据. * * 2015-12-25 晴 深圳 南山平山村 曾剑锋 **********************************************************************

powerDesigner如何同时显示name,code和data type

问题描述 我在word上看到pd的截图是:显示了 name和code和data type可是在我本地安装的pd显示是:值显示name和data type.应该在pd中如何设置?谢谢 解决方案 http://blog.csdn.net/spt110/article/details/8640849参考一下

GO语言变量及数据类型(variable, data type) 学习总结教程

1. variable 1.1 变量使用关键字 var 定义.变量是强类型的. package main import "fmt" var i int var c, python, java bool func main() {     fmt.Println(i, c, python, java) } 1.2 定义变量时候可以不指定类型,而是通过赋值获得类型 package main import "fmt" var i, j int = 1, 2 var c,

Parameter \' \': No size set for variable length data type: String

http://blog.163.com/pinbo_jiankun/blog/static/13354648820138245630971/

【Agile Pair Coding】Data Type Mapping

介绍     今天下午用了1个小时左右,和同事Agile Pair Coding敏捷开发了一把,感觉挺爽的.     Agile Pair Coding给我们带来的直接好处是:相互不浪费时间(就两个人),高效:idea很快达成共识(就两个人),不纠结于无谓的讨论:idea立马coding,不沉迷于头脑风暴:代码更严谨:重构概率大:加深基情:相互学习,相互欣赏,相互指正:避免无知,避免自我感觉良好......     代码主要实现:从所有类型文件中,得到所有NE类型下的所有Object类型下的所有

PHP教程.程序控制

程序|教程|控制 程序控制 本章深入PHP内部,讲述如何使用函数.表达式和语句以实现对程序的控制. 前面的章节初步介绍了怎样操作数据,如果我们将操作数和操作符看作是构筑元件的话,那么它们组合起来即可形成表达式.进一步讲,表达式可以构成语句,语句用于组成函数,而函数则可用来组成程序. 提示:在学习有关编程语言的基本元素时,从全局理解--即理解这些元素是如何组成一个完整程序的--可能非常困难.但也不必着急,乐观一点.接下来的章节将逐步的显示整个程序,并且一点一点的解释它们是如何构造的. 4.1 表达

《PHP程序设计》 第四章 程序控制

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  第四章 程序控制      本章深入PHP内部,讲述如何使用函数.表达式和语句以实现对程序的控制.      前面的章节初步介绍了怎样操作数据,如果我们将操作数和操作符看作是构筑元件的话,那么它们组合起来即可形成表达式.进一步讲,表达式可以构成语句,语句用于组成函数,而函数则可用来组成程序.      提示:在学习有关编