函数内全局require和局部require有区别吗

问题描述 投票:0回答:1

AFAIK,一旦模块被加载,lua 就会将结果缓存到 package.loaded[modName] 中。无论我们在哪里需要“模块”,这个说法都成立吗?

以下示例:

在下面的示例中,

script1
仅加载一次module.lua,因此任何其他用法仅从package.loaded中获取内容,而
script2
则需要两次。在第二种情况下,我们在函数作用域内加载模块,这是否意味着 lua 不会像第一种情况那样缓存
require "module"
的结果?

模块.lua

local Table = {}
local function print_func(message):
    print(message)
end

Table.print_func = print_func

return Table

脚本1.lua

local table = require "module"
local function perform()
    table.print_func("PERFORM")
end

local function work()
    table.print_func("WORK")
end

script2.lua

local function do()
    local table = require "module"
    table.print_func("DO")
end

local function work()
    local table = require "module"
    table.print_func("WORK")
lua require
1个回答
0
投票

没有什么区别,只是函数的结果会被丢弃,但是由于Lua引擎会缓存“require”的结果,当下次对同一个文件调用“require”时,缓存的值将被退回。在后一种情况下,这是一个额外的表查找,也是通常首选全局“require”的原因之一。

© www.soinside.com 2019 - 2024. All rights reserved.