1. 词法定界:
定界:指变盘与变量所对应实体之间绑定关系的有效范围, 在部分情况下也常与可见性 ( visibility )混用。
词法定界也被称为静态定界( static scoping ),常常与动态定界( dynamic scoping )比较。
其中 前者被大多数现代编程语言采用,后者常见于Bash等Shell语言。
使用静态定界时, 一个变量的可见性范围仅严 格地与组成程序的静态具体词法上下文有关,而与运行时的具体堆钱调用无关;
使用动态定界时,一个变量的可 见性范围在编译时无法确定, 依赖于运行时的实际堆核调用情况。
2.函数是第一类值,函数也是值foo = function (x )return 2*x end 。等同于function foo (x )return 2*x end – 是其美化形式。
3. 所有的函数都是匿名的。比如,print函数,print指的是保存该函数的变量。
匿名性便利操作:table.sort(network, function (a,b )return (a. name > b.name) end)
像函数sort,称之为高阶函数。
4. 函数(作变量)用法
Lib == {}
function Lib.foo (x ,y )return x + y end
function Lib.goo (x ,y )return x - y end
等价于
Lib = {
foo = function (x ,y) return x + y end ,
goo = function (x ,y) return x - y end
}
5.local function foo (params) body end 等价于local foo; foo = function (params) body end 举例理解:
local fact = function (n)
if n == 0 then return 1
else return n*fact(n-1) -- 有问题,编译至此时fact尚未定义。解决如下
end
end
local fact
fact = function (n)
if n == 0 then return 1
else return n*fact(n-1) -- 没问题
end
end
6. 前向声明:
local f -- “前向”声明
local function g ()
some code
f ()
some code
end
function f () -- 不可加local,否则生成一个全新的变量f
some code
g()
some code
end
7. 闭包,非局部变量(既不是全局变量,也不是局部变量)
function newCounter ()
local count = 0 -- 非局部变量
return function ()
count = count + 1
return count
end
end
c1 = newCounter () -- 创建的函数已经成功返回
Print(c1())--> 1 -- 依旧可以访问count变量(闭包机制)
Print(c1()) --> 2 -- 依旧可以访问count变量(闭包机制)
1.闭包就是一个函数外加能够使该函数正确访问非局部变量所需的其他机制。
2.Lua语言中只有闭包没有函数。函数只是闭包的一种原型。
3.闭包对于回调也很管用:
function digitButton (digit)
return Button{ label = tostring (digit),
action = function()
add_to_display(digit)
服务器托管网 end
}
end
action是按钮被按下时调用的回调函数。回调可能发生在digitButton早已执行结束之后,那时,digit已经超出了作用范围(貌似),但闭包仍可访问.
8. 闭包另一用途:重新定义函数,甚至是预定义函数。 进而可创建沙盒。
do
local oldOpen = io.open
local access_OK = function (filename, mode )
check access
end
io. open = function (filename, mode ) --闭包重定义
if access_OK(f ilename , mode ) then
return oldOpen (filename , mode )
else
return nil, ”access denied"
end
end
end
上述代码即是沙盒(创建安全的运行时环境,当执行一些诸如从远程服务器上下载到的未受信任代码( untrusted code )时,安全的运行时环境非常重要。 )举例。 借助这种机制可以根据需求裁剪具体的运行环境。
9. 特征函数使用举例。
设计系统,首先得设计合适的数据结构。在Lua中,可试着使用面向对象的方案,利用继承等。也可以直接利用特征函数(集合 A 的特征函数 fA 是指 当且仅当 x 属于 A 时 fA(x) 成立)。举例:
-- 一个圆形区域
function disk1 (x, y)
return (x - 1.0)^2 + (y - 3.0)^2
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机服务器托管网房托管, http://www.fwqtg.net
相关推荐: C++ Qt开发:ComboBox下拉组合框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ComboBox下拉组合框组件的常用方法及灵活运用。 在Qt中,Combo…