如何解决如何在Lua中将一个函数传递给另一个函数?
我是 Lua 的初学者,我想为我的 nvim 配置 init.lua
。我试图将一个函数(从 init.lua
)作为参数传递给另一个函数(到 nerdTree.lua
),并在 nerdTree.lua
我认为这应该可行,但出现错误:
/.config/nvim/init.lua:26: attempt to call a boolean value
这是为什么?我做错了什么?
我的init.lua
local function load_plugins()
local use = require('packer').use
require("packer").startup(
{
function()
use 'wbthomason/packer.nvim'
use "neovim/nvim-lspconfig"
use 'glepnir/lspsaga.nvim'
use "nvim-lua/completion-nvim"
use "nvim-treesitter/nvim-treesitter"
use "joshdick/onedark.vim"
use "itchyny/lightline.vim"
use "ryanoasis/vim-devicons"
require('nerdTree')(use) //Point of interest
end,config = {package_root = '/tmp/nvim/site/pack'}
}
)
end
我的nerdTree.lua
function load(use)
use "preservim/nerdtree"
end
解决方法
之所以会出现该错误,是因为您只能调用实现了 __call
元方法的函数值或值。
鉴于您的实施
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)
应该可以工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。