我是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发布于 2021-04-27 16:46:34
之所以会出现这个错误,是因为您只能调用函数值或实现了__call元方法的值。
给定您的实现
function load(use)
use "preservim/nerdtree"
endrequire("nerdTree")将返回nil。
这可能会被nvim转换为布尔值,否则您将在尝试调用nil值时遇到错误。但这只是一种猜测,因为我知道一些值被转换为各自的VimL类型。另一个可能的原因是已经存在另一个nerdtree模块,而您并没有加载您的模块,而是一个返回布尔值的模块。你很快就会知道的。
如果你想调用你需要的东西,你的模块需要返回一个可调用的值。
但是当你的模块定义了一个全局函数时,你可以简单地这样做:
require("nerdTree")
load(use)或者将您的模块更改为
local function load(use)
use "preservim/nerdtree"
end
return load那么require("nerdTree")(use)应该可以工作了。
https://stackoverflow.com/questions/67279442
复制相似问题