本地函数相互调用

2023-12-12

我有两个偶尔互相调用的函数,它们对于使用它们构建另一个函数的模块来说是本地的。该模块与这段代码有点相似:

local function iseven(n)
    if n == 1 then
        return false
    else
        return isodd(n - 1)
    end
end

local function isodd(n)
    if n == 1 then
        return true
    else
        return iseven(n - 1)
    end
end

local evenOrOdd = function(n)
    return iseven(n) and "Even" or "Odd"
end

return evenOrOdd

问题是,当调用evenOrOdd从另一个文件我收到错误attempt to call global 'isodd' (a nil value).

我注意到如果我设置的话就不会发生这种情况iseven全局,但我想将它们保留在我的模块本地。

我什至尝试放置一个虚拟函数声明(local function isodd() end) 在 where 行之前iseven被宣布。我也尝试插入local isodd代替虚拟函数声明,但在这两种方式中它都不起作用,并且我收到不同类型的错误。

我知道这是因为 Lua 有闭包,当iseven被声明它捕捉到的实际值isodd,这是nil或者虚拟函数,之后修改它不算数,但是有没有办法绕过这个?


问题是调用isodd in iseven uses a global变量,而不是稍后定义的本地变量。

按照@Egor的建议使用前向声明:

local iseven, isodd

function iseven(n)
...
end

function isodd(n)
...
end

...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

本地函数相互调用 的相关文章

  • 在 C 或 C++ 中返回结构是否安全?

    我的理解是不应该这样做 但我相信我已经看到过这样做的示例 注意代码不一定在语法上正确 但想法就在那里 typedef struct int a b mystruct 然后这是一个函数 mystruct func int c int d my
  • 去掉尾随零和小数点

    使用 Lua 我将数字格式化为可变位数并去掉尾随零 小数点 例如 string format precision f value gsub 0 1 gsub 值的类型为数字 正数 负数 整数 小数 所以任务已经解决了 但出于美学 教育和性能
  • Haskell 中函数和函子有什么区别?只有定义吗?

    在 Haskell 中 当编写函数时 这意味着我们将某个东西 输入 映射到另一个东西 输出 我尝试 LYAH 来理解 Functor 的定义 看起来和普通 Functor 一样 函数被称为函子有什么限制吗 Functor 是否允许有 I O
  • 如何获得字符串的所有字谜

    我试图找到一个字符串的所有可能的字谜并仅使用递归将它们存储在数组中 我被困住了 这就是我所拥有的一切 int main const int MAX 10 string a ABCD string arr 10 permute arr a 0
  • 同一参数有两个不同的名称有什么意义?

    func mapEachElement inArray arr Int withFunc aFunc Int 为什么会有 inArray 然后 arr 有什么意义 对于 withFunc 和 aFunc 也是如此 它使代码变得更加复杂并且阅
  • 创建一个打开文件并创建字典的函数

    我有一个正在处理的文件 我想创建一个读取文件并将内容放入字典中的函数 然后该字典需要通过 main 函数传递 这是主程序 它无法改变 我所做的一切都必须与主程序配合 def main sunspot dict file str raw in
  • 将数组中的所有值作为参数传递给函数

    我有一个值数组 a b c d 我需要将它们作为参数传递给函数 window myFunction a b c d 如果我可以将数组 对象传递到函数中 那么这会更容易 但这些函数是由其他人编写的或已经存在 我无法更改它们 它们需要作为单独的
  • 如何在 PHP 中递归删除目录及其全部内容(文件+子目录)? [复制]

    这个问题在这里已经有答案了 如何在 PHP 中删除目录及其全部内容 文件和子目录 手册页中的用户贡献部分rmdir http www php net rmdir包含一个不错的实现 function rrmdir dir if is dir
  • 跟踪 C++ 中递归函数被调用的次数

    我正在尝试编写一个程序 该程序具有一个参数是字符串向量的函数 我想在该函数上使用递归 但每次调用该函数时 我想更改参数 例如 fun stringArray i 其中 i 是调用该函数的次数 因此 以更简单的方式 如下所示 但我需要跟踪函数
  • 用于从深层嵌套列表/元组中提取元素的递归函数

    我想编写一个从深层嵌套元组和列表中提取元素的函数 假设我有这样的东西 l THIS THAT a b c THAT d e f 我想要一个没有 这个 和 那个 的简单列表 list a b c d e f 这是我到目前为止所拥有的 def
  • 如何返回n对括号的所有有效组合?

    def paren n lst for x in range n current string join lst solutions list for i in range len current string 1 close curren
  • 如何使用 jQuery 在第二次单击时反转 CSS 动画

    我制作了以下菜单图标 CSS 动画 当我点击它时会触发它 当我使用 jQuery 第二次单击它时 我想使其反向动画 path1 stroke dasharray 33px stroke dashoffset 33px animation l
  • 将数组传递给函数名称冲突

    Specs GNU bash 版本 3 1 17 无法升级 Premise 我一直在摆弄数组 我想知道是否有任何方法可以让函数的本地变量与所述函数外部的数组同名 Example 在下面的示例中 我将尝试显示该问题 Working bin b
  • php 删除特定文件夹及其所有内容

    我正在使用 php 删除包含已删除帖子图像的文件夹 我正在使用下面的代码 这是我在网上找到的并且做得很好 我想知道当一个文件夹中有其他文件夹时 如何只删除其中的特定文件夹 当我使用下面的代码时 如何才能做到这一点 使用 dev images
  • 我应该使用函数还是无状态函子?

    这两段代码做同样的事情 如您所见 它将用于排序函数 哪个更好 我通常写后一种 但我看到一些程序员像以前那样做 struct val lessthan binary function
  • swift 中闭包和函数作为参数的区别

    我有将近 4 年的 Objective C 经验 并且是 swift 的新手 我试图从 Objective C 的角度理解 swift 的概念 所以如果我错了 请指导我 在目标 c 中 我们有块 可以稍后异步执行的代码块 这绝对是完全合理的
  • 递归方法比交互式方法慢 10 倍 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 代码已尽可
  • 根据传递的参数覆盖 Javascript 函数

    是否可以根据传递给函数的参数数量来重写函数 例如 function abc name document write My name is name function abc name friend document write My nam
  • 有没有办法从画布上清除一个元素而不消除其他元素?

    我正在使用画布构建页面加载器 并使用 es6 类 虽然目前我无法使其正常工作 原因之一是我找不到清除画布的方法进展 到目前为止 这是我的代码 class Loader constructor width height this width
  • 如何显示 zsh 函数定义(如 bash“type myfunc”)?

    如何在 zsh 中显示函数的定义 type foo没有给出定义 在bash中 bash function foo echo hello bash foo hello bash type foo foo is a function foo e

随机推荐

  • 在 Unity3d 中将完整的相机视图 (16:9) 渲染到纹理上

    我正在研究 Unity 的渲染纹理 您可以将相机的视图渲染到纹理上 然而 我注意到它并没有渲染整个相机的视图 它仅渲染相机视图的方形切片 我正在尝试的是将相机的整个视图 16 9 长宽比 渲染到纹理 也是 16 9 长宽比 上 但现在它似乎
  • Java 中的线程数有硬性限制吗?

    Some sources比如说 你对 Java 中的线程数量有一个硬性限制 比如 15k 或 30k 即使你没有操作系统上限和无限的 RAM 我还听说 在 Java 7 中这个限制被取消了 这两种说法都属实吗 The Java虚拟机规范没有
  • MonoTouch/iOS 设备 (iPhone/iPad) 上的 protobuf-net 发生 JIT 编译错误

    我正在使用 protobuf net v2 beta r450 二进制发行版 并使用此处描述的技术提前构建序列化程序集 http www frictionpointstudios com blog 2011 3 31 using proto
  • 使用核心动画对图像进行排序,接收内存警告

    我使用 100 个动画图像收到内存警告 因此我尝试使用 Core Animation 但这给了我同样的问题 这是因为我不知道如何在当前代码中使用replaceSublayer UIView upwardView UIView alloc i
  • 异常安全和 make_unique

    只是为了澄清 使用make unique仅当表达式中有多个分配 而不仅仅是一个 时才增加异常安全性 对吗 例如 void f T f new T 是完全异常安全的 就分配和东西而言 而 void f T T f new T new T 是不
  • WCF ServiceHost basicHttpBinding 503 错误

    我正在尝试在 Windows 2007 SP1 服务器上将 WCF ServiceHost 作为 NT 服务运行 ServiceHost 负责托管单个服务端点 具有以下地址的 basicHttpBinding http localhost
  • RemoteControlReceivedWithEvent 在 iOS 7.0 设备上调用,但在 iOS 8.0 上不调用

    我有一个在后台播放音频的应用程序 我正在尝试修复主屏幕 等 上的音频控件 播放 暂停 在 iOS 8 0 上无法工作但在 iOS 7 0 上工作正常的错误 我一直在努力找出问题所在 但一无所获 任何想法将不胜感激 这是我所拥有的 在项目设置
  • 从图库中选择一张图像

    我看过很多关于此的帖子 看起来下面的代码应该可以工作 我已经创建了一个 SD 卡映像并将其添加到模拟器中 并且工作正常 Intent intent new Intent Intent ACTION PICK intent setType i
  • 将鼠标悬停在 div 上会影响外部元素[重复]

    这个问题在这里已经有答案了 我试图在 div 悬停时影响外部元素 像这样的事情 div class affected Hi div div div class hover me div div CSS hover me hover affe
  • Javascript 世界时钟仅显示在表中

    我试图显示世界各地几个不同城市的时间 我已经搜索和谷歌 甚至使用了这里找到的答案 PHP 或 JavaScript 中的世界时钟 API 但时钟只会显示在表格中 我使用了这个网站的教程 http www proglogic com code
  • 字体大小缩放问题

    我正在编写一个 C wxWidgets 计算器应用程序 我希望 wxTextCtrl 的字体和自定义按钮在调整窗口大小时能够缩放 问题是 我的按钮中的文本并不总是精确地位于中心 但有时会稍微偏离 特别是在绿色和红色按钮中 当我最大化窗口时
  • Python list 要列出的字符串

    我有一个字符串 s 7 9 41 32 67 我需要将该字符串转换为列表 l 7 9 41 32 67 问题是 当我使用列表时 我得到这个 7 9 4 1 3 2 6 7 我正在使用 python 3 2 You can完全按照您的要求使用
  • macOS Big Sur:意外的产品版本 11.1。如何修补 perlbrew?

    我刚刚将我的 Macbook Air 从 10 15 更新到 11 1 然后尝试使用 perlbrew 安装 perl 5 32 perlbrew install perl 5 32 0 Installing Users hakonhaeg
  • 轻松循环遍历 ElasticSearch 文档源数组

    我对网上商店中的产品有以下 ElasticSearch 数据结构 index vue storefront catalog 1 product 1617378559 type doc source configurable children
  • 使所有自动递增整数具有相同的位数且带有前导零

    我想知道是否有一种方法可以将我的 id 列 自动递增 设置为始终使用 mysql 表中的前导零组成 5 位数字 所以第一个值将是 00001 然后 00002 等等直到 99999 而不是 1 2 3 直到 99999 谢谢 尝试添加ZER
  • 快速更改 tableviewcell 的宽度

    我有一个使用 IB 的 tableView 以及自定义单元格和原型单元格 我试图使单元格的宽度比 tableView frame 短一点 以便在左右角之间留出一点空间 var cell tableView dequeueReusableCe
  • 如何在jquery对象上调用raphael方法?

    我正在使用拉斐尔创建一些圆圈 当用户单击按钮时 我想为这些圆圈设置动画 通过增加其半径 我该怎么做呢 例如 这是我的示例代码
  • Spring / JTA / JPA 单元测试:回滚不起作用

    我正在尝试使用 Spring 测试实体 EJB3 EJB 本身不使用 Spring 我希望尽量减少生产 JPA 配置的重复 例如 不重复 persistence xml 我的单元测试似乎有效 但即使我的单元测试应该是事务性的 数据也会在各种
  • 如何通过Map<>将快照键和值拉入列表?

    我一直在关注使用实时数据库的官方 Firebase 教程 https www youtube com watch v sXBJZD0fBa4 我能够从 firebase 实时数据库中提取所有数据 但是 下面的方法提供了数据列表 但不引用父键
  • 本地函数相互调用

    我有两个偶尔互相调用的函数 它们对于使用它们构建另一个函数的模块来说是本地的 该模块与这段代码有点相似 local function iseven n if n 1 then return false else return isodd n