L02-01. do....end语句

一. 语句块 do .....  end

为什么要使用do end,它到底能够解决什么问题呢?

do-end 解决的是变量作用域的问题,首先必须要明白local变量和全局变量拥有完全不同的词法作用域;我们应该尽量声明local变量,尽量减少一个变量的作用域范围,使其仅存在于自己需要的变量块内,而不要污染更大范围内的公共环境;

   1. local var do ... end写法

--local var do ... end 写法
local subBlock do
end --这俩代码等同 local subBlock do
end

  2. 可以使变量更安全

--代码外面修改print不会影响到trpeint函数
do
    --将全局print函数的地址赋值给局部变量print, 那么局部变量就具备了全局函数逇功能
    local print = print  --赋值的是地址即使在do .... edn外修改了print也能正常使用自定义的traceprint函数
    function traceprint(...)
        print(...)
    end
end
print = 0           --修改了全局函数名的值,这个全局函数不在指向有输出功能那个函数
traceprint(123)     --输出结果: 123

  3. 需要严格的控制某些局部变量的作用域, 在使用时候如果一个变量在某段中才会用到,可以使用do...end

local a, b = 1
do
    local a = a + b
    print(a)    --2
end
print(a)        --1

  4. 使用 do return end 来中断脚本执行

local function func()
    print(1)    --1
    do return end
    print(2)
end
posted @ 2022-09-08 17:42  小书臣  阅读(51)  评论(0编辑  收藏  举报