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

目录
相关文章
|
3月前
【Azure Function App】在ADF(Azure Data Factory)中调用 Azure Function 时候遇见 Failed to get MI access token
【Azure Function App】在ADF(Azure Data Factory)中调用 Azure Function 时候遇见 Failed to get MI access token
|
3月前
|
网络协议
【Azure 应用服务】Azure Data Factory中调用Function App遇见403 - Forbidden
【Azure 应用服务】Azure Data Factory中调用Function App遇见403 - Forbidden
|
11月前
|
前端开发 JavaScript 安全
AJAX - $().load(url,data,function(response,status,xhr))
AJAX - $().load(url,data,function(response,status,xhr))
51 0
|
JavaScript 开发者
组件-为什么组件的 data 必须是一个 function|学习笔记
快速学习组件-为什么组件的 data 必须是一个 function
110 0
|
SQL NoSQL 关系型数据库
MySQL:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
MySQL:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
228 0
D3 dataset - what is usage of key function in data
Created by Wang, Jerry, last modified on Sep 21, 2015
118 0
D3 dataset - what is usage of key function in data
|
XML JSON 前端开发
jquery 的 ajax的dataType,服务器返回了数据,但是succes:function(data)不执行
当ajax中设置的dataType的类型和 服务器返回的数据类型不一致时,succes:function(data)会不执行 如服务器ServletActionContext.getResponse().getWriter().print("error"); 前台 $.ajax({type:"POST",dataType:"json",//指定返回的数据类型,自动解析
1676 0
|
12天前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新特性,与传统函数相比,它有更简洁的语法,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。箭头函数不适用于构造函数,不能使用new关键字调用。

热门文章

最新文章