如何在Lua中将一个函数传递给另一个函数?

如何在Lua中将一个函数传递给另一个函数?,lua,nvim,Lua,Nvim,我是Lua的初学者,我想为我的nvim配置init.Lua。我试图将一个函数(从init.lua)作为参数传递给另一个函数(到nerdTree.lua),并在nerdTree.lua 我认为这应该行得通,但我犯了一个错误: /.config/nvim/init.lua:26: attempt to call a boolean value 为什么呢?我做错了什么 Myinit.lua 本地函数加载\插件() 本地使用=需要('packer')。使用 要求(“打包机”)启动( { 函数() 使用

我是Lua的初学者,我想为我的nvim配置
init.Lua
。我试图将一个函数(从
init.lua
)作为参数传递给另一个函数(到
nerdTree.lua
),并在
nerdTree.lua

我认为这应该行得通,但我犯了一个错误:

/.config/nvim/init.lua:26: attempt to call a boolean value
为什么呢?我做错了什么

My
init.lua

本地函数加载\插件()
本地使用=需要('packer')。使用
要求(“打包机”)启动(
{
函数()
使用“wbthomason/packer.nvim”
使用“neovim/nvim lspconfig”
使用“glepnir/lspsaga.nvim”
使用“nvim lua/完成nvim”
使用“nvim treesitter/nvim treesitter”
使用“joshdick/onedark.vim”
使用“itchyny/lightline.vim”
使用“Ryanasis/vim设备”
require('nerdTree')(use)//兴趣点
完,,
config={package_root='/tmp/nvim/site/pack'}
}
)
结束
我的
nerdTree.lua

功能加载(使用)
使用“preservim/nerdtree”
结束

之所以会出现此错误,是因为您只能调用函数值或实现了
\u调用的
元方法的值

考虑到你的实施

function load(use)
    use "preservim/nerdtree"
end
require(“nerdTree”)
将返回
nil

nvim可能会将其转换为布尔值,否则您将在尝试调用nil值时遇到错误。但这只是一个猜测,因为我知道一些值被转换为各自的VimL类型。另一个可能的原因是已经有了另一个nerdtree模块,您并没有加载您的模块,而是加载一个返回布尔值的模块。你很快就会知道的

如果要调用所需的内容,则模块需要返回一个可调用的值

但由于您的模块定义了一个全局函数,您可以简单地执行以下操作:

require("nerdTree")
load(use)
或者将您的模块更改为

local function load(use)
  use "preservim/nerdtree"
end
return load

然后
require(“nerdTree”)(use)
应该可以用了。

回答得很好。我想现在我明白了为什么lua开发人员使用
localobj={}
并为其分配方法并将其导出。全局函数对分离非常不利。是将其转换为布尔值还是需要错误的模块?