首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将一个函数传递给Lua中的另一个函数?

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

Stack Overflow用户
提问于 2021-04-27 16:25:06
回答 1查看 143关注 0票数 1

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

我认为这应该可以工作,但我得到了一个错误:

代码语言:javascript
复制
/.config/nvim/init.lua:26: attempt to call a boolean value

为什么会这样呢?我做错了什么?

我的init.lua

代码语言:javascript
复制
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

代码语言:javascript
复制
function load(use)
    use "preservim/nerdtree"
end
EN

回答 1

Stack Overflow用户

发布于 2021-04-27 16:46:34

之所以会出现这个错误,是因为您只能调用函数值或实现了__call元方法的值。

给定您的实现

代码语言:javascript
复制
function load(use)
    use "preservim/nerdtree"
end

require("nerdTree")将返回nil

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

如果你想调用你需要的东西,你的模块需要返回一个可调用的值。

但是当你的模块定义了一个全局函数时,你可以简单地这样做:

代码语言:javascript
复制
require("nerdTree")
load(use)

或者将您的模块更改为

代码语言:javascript
复制
local function load(use)
  use "preservim/nerdtree"
end
return load

那么require("nerdTree")(use)应该可以工作了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67279442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档