类型不匹配。预期为 i32,发现 () [重复]

2023-11-27

这段代码:

fn ackermann(m: i32, n: i32) -> i32 {
    if m == 0 {
        return n + 1;
    } else if m > 0 && n == 0 {
        return ackermann(m - 1, 1);
    } else if m > 0 && n > 0 {
        return ackermann(m - 1, ackermann(m, n - 1));
    }
}

编译时出现错误:

error: mismatched types [--explain E0308]
 --> src/main.rs:3:5
  |>
3 |>     if m == 0 {
  |>     ^ expected i32, found ()
note: expected type `i32`
note:    found type `()`

并非所有代码路径都会返回值。您可以通过几种方法解决这个问题..但是由于这似乎是一个递归函数..您可能需要一种方法来打破递归:

fn ackermann(m: i32, n: i32) -> i32 {
    if m == 0 {
        return n + 1;
    } else if m > 0 && n == 0 {
        return ackermann(m - 1, 1);
    } else if m > 0 && n > 0 {
        return ackermann(m - 1, ackermann(m, n - 1));
    }

    return 0; // This breaks your recursion
}

或者,也许是一个明确的else:

if m == 0 {
    return n + 1;
} else if m > 0 && n == 0 {
    return ackermann(m - 1, 1);
} else if m > 0 && n > 0 {
    return ackermann(m - 1, ackermann(m, n - 1));
} else { // An explicit else also works
    return 0;
}

我没有太多思考这个算法是什么/做什么..但错误非常明显。如何打破递归并使函数返回实际值取决于您。

EDIT:本杰明在评论中指出,这个特定函数实际上不应该达到您提供的条件之外。因此,其他一些选项包括如果代码确实泄露或可能返回则出现恐慌Result<i32>反而。

TLDR 是:如果您的条件均不满足......那么该函数在预期返回数字时将不会返回任何内容。

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

类型不匹配。预期为 i32,发现 () [重复] 的相关文章

随机推荐

  • 在 BAT 脚本中检查目录是否可写的最佳方法?

    如何通过批处理脚本检查执行用户是否可写入目录 到目前为止 这是我尝试过的 gt cd PROGRAMFILES gt echo gt foo Access is denied gt echo ERRORLEVEL 0 好吧 那怎么样 gt
  • python中字符串到列表的转换

    我有一根绳子 s 1989 1990 我想使用 python 将其转换为列表 并且我希望输出为 s 1989 1990 有没有最快的单班轮方式 Use 列表推导式 s 1989 1990 x strip for x in s split 简
  • jQuery .hasClass() 与 .is()

    从性能的角度来看 是否有一种首选方法来确定元素是否分配有类 foo hasClass bar or foo is bar Update 我在一条评论和四张评论后进行了测试 事实证明我说的是正确答案 结果如下 http jsperf com
  • PayPal NVP API 错误:抱歉,我们目前无法完成您的购买

    我正在使用 PayPal NVP API 当我使用沙箱帐户和沙箱 API ENDPOINT 时 效果很好 当我使用生产帐户和生产API ENDPOINT时 它成功重定向到PayPal 但用户输入paypal用户名和密码并提交后 显示 抱歉
  • 了解键盘布局何时更改

    我正在编写一个屏幕键盘 并且希望在键盘布局更改后立即重新绘制布局 目前我打电话 GetKeyboardLayout GetWindowThreadProcessId GetForegroundWindow NULL 在每次按键时查看布局是否
  • WPF 中的配置管理器

    我在 wpf 项目中有一个配置文件来存储连接字符串 但是当我尝试获取 AppSettings 和 ConnectionStrings 时 我得到 null WEB config 文件是这样的
  • numpy genfromtxt/pandas read_csv;忽略引号内的逗号

    考虑一个文件 a dat 内容 address 1 address 2 address 3 num1 num2 num3 address 1 address 2 address 3 1 0 2 0 3 address 1 address 2
  • 如何在类中并行化 python 中的 for ?

    我有一个 python 函数funz每次都会返回长度为 p 的不同数组 我需要多次运行该函数 然后计算每个值的平均值 我可以使用 for 循环来完成此操作 但需要很多次 我正在尝试使用库多处理 但遇到错误 import sklearn as
  • Vue 3 反应性未从类实例内部触发

    代码笔 https codepen io codingkiwi pen XWMBRpW 假设你有一堂课 class MyClass constructor this entries a example change triggered fr
  • 对 NSDate 的 NSArray 进行排序

    我有一个 NSDate 对象的 NSArray 我想对它们进行排序 以便今天为 0 昨天为 1 等 是升序还是降序 我是否使用函数 选择器或其他什么 NSArray 有不同的排序方法 因为您可能需要不同的排序方式 NSSortDescrip
  • 读取套接字:EAGAIN:资源暂时不可用

    我用 C 创建了一个套接字 我需要它有一定的连接超时 这就是正在发生的事情 创建套接字 使其成为非阻塞 呼叫连接 它按预期返回 1 和 errno EINPROGRESS 呼叫选择 返回 gt 0 表示已建立连接 使套接字再次阻塞 这部分的
  • 如何使用 ImageMagick 获取整个图像文本中的 RGB 像素值?

    我是 ImageMagick 的新手 我想知道图像整个像素的 RGB 颜色 我已经知道如何获取一个像素的 RGB 颜色 但我不知道如何用一个命令获取所有像素的数据 对每个像素执行每个命令非常繁重 无法使用它 最好的命令结果是这样的 x y
  • 我的公报上的实体无法识别

    我想创建一个自定义 NER 模型 这就是我所做的 训练数据 斯坦福 ner tsv Hello O O My O name O is O Damiano PERSON O 特性 stanford ner prop trainFile sta
  • iPhone 子视图设计(UIView 与 UIViewController)

    我正在设计一个简单的测验应用程序 应用程序需要显示不同类型的测验问题 每种类型的 QuizQuestion 都有不同的行为和 UI 用户界面将是这样的 替代文本 http dl getdropbox com u 907284 Picture
  • Java 8 lambda 和匿名内部类之间的性能差异

    在 Java 8 之前 可以通过使用匿名内部类来实现 lambda 功能 例如 interface Lambda void doStuff public void doWithCallback Lambda callback callbac
  • 使用 Firebase 的服务器端计算

    给定开始时间 日期和持续时间 我如何进行服务器端计算来确定对象是否为 finished in progress or upcoming Show duration 144 startDate 2015 11 10 startTime 14
  • 如何在 Lisp 中创建并写入文本文件

    我想知道如何在 Lisp 中创建和写入文本文件 我只想写简单的一行 例如 break 1 break 2 我在 Window 7 上使用 LispWorks IDE with open file str filename txt direc
  • Laravel 5 REST 客户端 CRUD

    Laravel 5 有没有办法使用 REST 进行 CRUD 我已经有一个使用 CodeIgniter 的 REST API 并且我希望我的 Laravel 应用程序能够与其通信 假设我有这个网址来获取所有性别 http api local
  • C 编程#define? [复制]

    这个问题在这里已经有答案了 可能的重复 谁能解释这些未定义的行为 i i i i i 等等 include
  • 类型不匹配。预期为 i32,发现 () [重复]

    这个问题在这里已经有答案了 这段代码 fn ackermann m i32 n i32 gt i32 if m 0 return n 1 else if m gt 0 n 0 return ackermann m 1 1 else if m