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

目录
相关文章
|
前端开发 JavaScript 安全
AJAX - $().load(url,data,function(response,status,xhr))
AJAX - $().load(url,data,function(response,status,xhr))
114 0
【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
117 3
|
网络协议
【Azure 应用服务】Azure Data Factory中调用Function App遇见403 - Forbidden
【Azure 应用服务】Azure Data Factory中调用Function App遇见403 - Forbidden
|
JavaScript 开发者
组件-为什么组件的 data 必须是一个 function|学习笔记
快速学习组件-为什么组件的 data 必须是一个 function
185 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
853 0
|
XML JSON 前端开发
jquery 的 ajax的dataType,服务器返回了数据,但是succes:function(data)不执行
当ajax中设置的dataType的类型和 服务器返回的数据类型不一致时,succes:function(data)会不执行 如服务器ServletActionContext.getResponse().getWriter().print("error"); 前台 $.ajax({type:"POST",dataType:"json",//指定返回的数据类型,自动解析
1762 0
|
8月前
|
人工智能 Python
083_类_对象_成员方法_method_函数_function_isinstance
本内容主要讲解Python中的数据类型与面向对象基础。回顾了变量类型(如字符串`str`和整型`int`)及其相互转换,探讨了加法在不同类型中的表现。通过超市商品分类比喻,引出“类型”概念,并深入解析类(class)与对象(object)的关系,例如具体橘子是橘子类的实例。还介绍了`isinstance`函数判断类型、`type`与`help`探索类型属性,以及`str`和`int`的不同方法。最终总结类是抽象类型,对象是其实例,不同类型的对象有独特运算和方法,为后续学习埋下伏笔。
167 7
083_类_对象_成员方法_method_函数_function_isinstance

热门文章

最新文章