Lua Fun 是一个高兴呢的 LuaJIT 的函数编程库。
该库提供一组超过 50 中编程元素,这些元素在 Standard ML, Haskell, Erlang, JavaScript, Python and even Lisp 等编程语言中常用的。高阶函数诸如 map, filter, reduce, zip 将帮你简化应用的编写。
示例代码:
> require "fun" () > n = 100 > reduce(operator.add, 0, map(function(x) return x^2 end, range(n))) > -- calculate sum(x for x^2 in 1..n) 328350
1.函数介绍 1.1 LUA函数,跟别的编程语言函数定义大同小异,从另一方面说,它可以被看成是对表达式或语句的抽象机制,怎么说呢,函数分为有返回值与无返回值两种。对于没有返回值的函数而言,相当于将一条或多条语句封装起来执行,以便达到完成某项功能的目的。对于有返回值(return)的函数,相当于是一条表达,即最终会以一个结果返回被调用处。 1.2 LUA函数的定义如下 function xxx()
1. 变量是弱类型 2. --代表单行注释 --[[ ]] 代表多行注释 3. 局部变量使用local 4.调用其它lua文件,使用require 5. Lua中数据类型,可以用type()方法得到类型 nil:Lua特殊类型,一个全局变量没有被赋值以前默认值为nil,给全局变量赋nil可以删除该变量 boolean number 不分int float double
lua 反射 debug实现反射功能:获取函数信息、函数局部变量、函数使用的外部局部变量等 函数信息 getinfo(thread, f, what):获取函数的表信息 Returns a table with information about a fun
一、需要注意的数据类型 1. 表table Lua 实现表的算法颇为巧妙。每个表包含两部分:数组(array)部分和哈希(hash)部分,数组部分保存的项(entry)以整数为键(key),从 1 到某个特定的 n,所有其他的项(包括整数键超出范围的)则保存在哈希部分。 哈希部分使用哈希算法来保存和查找键值。它使用的是开放寻址(open address)的表,意味着所有的项都直接存在哈希数组里。键
定义的时候冒号默认接收self参数 调用的时候冒号默认传递调用者自己为参数 而句号要显示传递或接收self参数 -- 例如:句号定义,需要显示传递或接收 1 a = { x = 1 } 2 function a.fun(self) 3 print(self.x) 4 end 5 6 a.fun(a)--输出1,将a自己做为参数传给fun函数的self 这样调用要传递self
lua debug调试 debug 调试 相关函数 # debug.debug():调试模式 命令行进入调试模式,可调试函数、表达式等,输入cont退出debug模式 # debug.gethook(optional thread) 返回三个表示线程钩子设
Lua注解 @class类声明注解 EmmyLua利用 @class 注解来模拟面向对象中的类,可以继承,可以定义字段/属性 完整格式: --@class MY_TYPE[:PARENT_TYPE] [@comment] 应用目标: local 变量 global 变量 示例: ---@class Car : Transport @define class Car extends Transpo
lua 错误处理 语法错误 语法错误编译不能通过,通常是由程序使用不当引起 示例:nil与整数相加 Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio > a==2 false -- a由于未赋值,默认为nil,
简单的类实现 LUA中最基本的结构是table,用table来描述对象的属性。lua 中的 function 可以用来表示方法。 那么LUA中的类可以通过 table + function 模拟出来。 Student = { age = 1, growUp = function() -- print(age) 这样写与表中没有任何关系,他打印age这个全局变量
lua 常用内置函数 _VERSION 变量 查看当前lua的版本号 A global variable (not a function) that holds a string containing the running Lua version. Th
创建 fun=function() print(123) end 方式1 co=coroutine.create(fun) print(type(co))–返回值是thread 方式2 co1=coroutine.wrap(fun) print(type(co1))–返回值是function 使用 coroutine.resume(co)- -执行方式1创建的协程 co1()----执行方式2创建
lua 函数 函数 语法格式 function_scope function function_name( argument1, argument2, argument3, ...) function_body return result_
lua_Stat* lua = luaL_newstate(); // 一个新的 lua 状态机 luaL_openlibs( lua ); // 加载标准lib int my_fun_name( lua_State *L ) { int argc = lua_gettop( L ); // 获得函数参数个数 for( int i=1; i <= argc; ++i ) { //
函数 --函数 的返回值和参数不需要定义类型 --lua 中使用end代表函数的结束 不需要{} function fun1(n) if n==1 then return n else return n * fun1(n - 1) end end print(fun1(3)) -- 输出6 --可以把函数当做一个类型使用 fun2 = fun1 print(fun2(3)
函数式编程 -> 函数响应式编程 现在大家已经了解我们是如何运用函数式编程来操作序列的。其实我们可以把这种操作序列的方式再升华一下。例如,你可以把一个按钮的点击事件看作是一个序列: // 假设用户在进入页面到离开页面期间,总共点击按钮 3 次 // 按钮点击序列 let taps: Array<Void> = [(), (), ()] // 每次点击后弹出提示框 taps.forEach {
Python 提供了一个 functools 的模块,该模块为高阶函数提供支持,partial 就是其中的一个函数,该函数的形式如下: functools.partial(func[,*args][, **kwargs]) 这里先举个例子,看看它是怎么用的。 假设有如下函数: def multiply(x, y): return x * y 现在,我们想返回某个数的双倍,即: >>> mu
函数式编程(functional programming)是一种编程范式(Programming paradigm),或者说编程模式,比如我们常见的过程式编程是一种编程范式,面向对象编程又是另一种编程范式。 函数式编程的一大特性就是:可以把函数当成变量来使用,比如将函数赋值给其他变量、把函数作为参数传递给其他函数、函数的返回值也可以是一个函数等等。 Python 不是纯函数式编程语言,但它对函数式
函数式编程 面向值(value-oriented )编程有很多优势,特别是用在与函数式编程结构相结合。这种风格强调值的转换(译注:由一个不变的值生成另一个不变的值)而非状态的改变,生成的代码是指称透明的(referentially transparent),提供了更强的不变型(invariants),因此容易实现。Case类(也被翻译为样本类),模式匹配,解构绑定(destructuring bi
函数式编程是一种声明式编程。 First-class function 纯函数 高阶函数
函数式编程可以说是非常古老的编程范式,但是近年来函数式编程越来越受到关注。不管是 Google 力推的 Go, 学术派的 Scala 与 Haskell,还是 lisp 跑在 JVM 上的新方言 Clojure,这些新的函数式编程语言也都越来越受到关注。
什么是函数式编程 到现在我们已经讲了很多了,但还没有真正涉及到函数式编程。 目前所讲的所有特性 - 丰富的数据类型(rich data types), 模式匹配(pattern matching), 类型推导(type inference), 嵌套函数(nested functions) - 可以想象它们都可以在一种”超级C“语言中存在。这些特性当然很酷,它们使得代码简洁易读,减少bug,但是它们
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。 而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。 我们首先要搞明白计算机(Computer)和计算