Rust 为什么要费心“let”? [关闭]

2024-05-17

我对 Rust 很感兴趣,所以我开始阅读 Rust 网站上的 Rust 编程指南,发现变量是通过以下方式声明的:

let x: i32 = 5;

这意味着将值整数 5 分配给变量类型整数 32 位,应通过符号来引用x从现在开始。

我的主要问题是为什么let到底有没有关键字?这似乎是多余的,好像它实际上并没有“做”任何事情。

我假设编译器能够判断以下是变量(或 const 变量)声明:

x: i32 = 5;

似乎没有理由let关键字,但大概有is这是一个聪明的理由,因为 Rust 专注于安全。那么这个原因是什么呢?


编辑:添加:作为函数参数,let 关键字不是必需的。这是一个例子:

fn add1(x: i32) -> i32
{
    x = x + 1
}

这看起来有点奇怪 - 由于缺少,这“看起来像”通过引用传递let。但事实并非如此。这是一种价值传递。 (或者至少我认为是。)这是语法不一致吗?


顺便说一句,我发现更改此声明并编写更合乎逻辑:

i32 x = 5;

如果您愿意,请在其中添加冒号:

i32: x = 5;

我想我会发现这更合乎逻辑,因为:

  • 编程时,您通常在考虑数据名称之前就知道想要什么“类型”的数据。

也许有些人有相反的想法?但这让我想到了另一点:如何在 Rust 中声明多个相同类型的变量?例如:

let x, y, z: i32 = {4, 5, 5} // A guess of what this might look like?

或者这在 Rust 中是不允许的?


Rust 具有本地类型推断,因此通常不需要编写类型;let x = 5;就足够了。x = 5;会完全不同,因为它不会declare一个变量x,并且 Rust 非常刻意地将声明和赋值分开。

其实也是let PATTERN = EXPR;, 不只是let IDENT = EXPR;,因此删除let关键字会导致语法歧义。一个模式可以是mut x(使变量绑定可变),它可以是(a, b)表示元组拆包,&c.

你只是认为i32 x = 5;这是有道理的,因为您已经习惯了 C++ 等语言。说真的,谁想出了这个主意?从纯粹的哲学角度来看,在名称后面添加类型比以前更有意义,并且仅使用类型来声明变量也很愚蠢。那里有各种各样的语法歧义。类型推断允许您完全省略类型,这是一种更好的方法。

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

Rust 为什么要费心“let”? [关闭] 的相关文章

随机推荐

  • 互联网 RFC 数据包图中预期的位(不是字节)顺序是哪个

    我正在我的家庭有线网络上解析 ICMPv6 数据报 但在特定 RFC 中找不到对位排序约定的明确提及 多字节字段是网络顺序的 但是字节内的位又如何呢 机器是按字节寻址的 但网络硬件对位进行序列化 在图表中 8 位字段 左侧 的一位最终位于无
  • 简单的 Xml - 元素的顺序未保留?

    我在我的 Android 应用程序中使用 SimpleXml 2 6 1 尽管文档 http simple sourceforge net download stream doc javadoc index html org simplef
  • PHPExcel下载文件

    我想下载使用 PHPExcel 生成的 Excel 文件 我按照以下代码PHPExcel 强制下载问题 https stackoverflow com questions 26265108 phpexcel force download i
  • 将 Pandas TimeDelta 转换为整数

    假设我有一个包含 TimeDelta 数据的 Pandas Series 事实上 它是通过将 DateTimeIndex 与其自身的移位版本进行差值生成的 从而给出了连续时间戳之间的增量 它看起来像 timestamp 2015 02 01
  • rvest 和 NHL 统计数据的 CSS 选择器问题

    我想从 hockey reference com 中抓取数据 特别是从以下链接中抓取数据 https www hockey reference com leagues NHL 1991 html https www hockey refer
  • Django Rest Framework——没有名为rest_framework的模块

    我已经使用安装了 django rest 框架pip install djangorestframework但当我运行 python3 manage py sycndb 时 我仍然收到此错误 导入错误 没有名为 rest framework
  • 在哪里放置 OpenFL android 扩展的可绘制资源?

    我正在为我的 OpenFL 应用程序制作一个 android 扩展 当我从 Haxe 调用函数时 它应该显示一条通知 我需要在我的扩展项目中放置一个可绘制图标 因为通知需要一个图标 但是 Java 文件扩展了一个 Extension 类 该
  • SQL 约束最小值/最大值?

    有没有办法为数字字段设置 SQL 约束 最小值应为 1234 最大值应为 4523 SQL Server 语法为the check约束 http technet microsoft com en us library ms179491 as
  • 将自定义误差线添加到 seaborn regplot 和 residplot

    有没有一种方法可以将自定义错误栏添加到seaborn regplot和residplot中 就像使用yerr对matplotlib错误栏所做的那样 例子在这里 如果我只是添加 yrr 参数就会发生错误 import seaborn as s
  • css mime 类型返回为 text/plain 而不是 text/css

    我正在使用此代码从给定文件中获取 mime 类型 finfo new finfo FILEINFO MIME TYPE mime finfo gt buffer file get contents file 如果我给它提供一个 PHP 文件
  • 选择前 n 个字符相等的行(MySQL)

    我有一张带有玩家句柄的桌子 如下所示 1 N Laka 2 N James 3 nor Brian 4 nor John 5 Player 2 6 Spectator 7 N Joe 从那里我想选择第一个 n 字符匹配的所有玩家 但我不知道
  • 将 C++ 库嵌入到 .Net 库中

    在我的 Net 程序集中 我必须使用一些本机 C dll 通常我们需要将C dll复制到bin文件夹中并使用PInvoke来调用它 为了节省分发成本 我想将 C 直接嵌入到我的 Net dll 中 这样分发的程序集数量就会更少 知道如何做到
  • 调用擦除()后 std::map::iterator 出现问题

    erasing from map include
  • 打印 TDBGrid [重复]

    这个问题在这里已经有答案了 如何在不安装或下载组件的情况下打印 DBGrid OR 如何将 DBGrid 的数据放入 RichEdit 以便我可以从那里打印它 数据感知控件从 DataSource 属性获取数据 并使用它 不过 您必须手动遍
  • 导入 matplotlib.pyplot 时出错

    当我跑步时import matplotlib pyplot as plt 我收到以下错误消息 ImportError Traceback most recent call last
  • Apache kafka - 消费者延迟选项

    我想在 Kafka 中为特定主题稍稍延迟启动一个消费者 具体来说 我希望消费者在从生成消息的时间起经过特定的时间延迟后开始使用该主题的消息 Kafka 中有任何属性或选项可以启用它吗 我们对火花流做了同样的事情 我希望 这种方法也适合您 这
  • 在 DatePickerDialog 中使用 DatePicker setMaxDate() 时出现 NullPointerException

    我正在使用 DatePickerDialog 并且尝试设置最小和最大日期 以便用户只能选择前 24 小时或后 24 小时内的日期 这是代码 请注意 如果在 Android 3 0 或更高版本上运行 它只会尝试设置最小 最大范围 privat
  • 从 markdown 转换为 pandoc 时的 \newcommand 环境

    我使用 ipython 笔记本输入数学 然后转换为乳胶 让 mathjax 理解 newcommand 我必须把它放进去 例如 newcommand cl operatorname cl 与 mathjax 配合良好 问题是 当我使用 pa
  • 如何通过 Android 中小部件上的按钮运行活动?

    我正在开发一个由按钮组成的切换小部件 当按下时 我希望它运行一个活动而不打开任何东西 只是像往常一样在桌面上说 有没有办法通过桌面小部件上的按钮直接运行活动 谢谢 更新 现在我尝试在代码中切换静默模式而不运行新的活动 这是我当前的代码 当我
  • Rust 为什么要费心“let”? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对 Rust 很感兴趣 所以我开始阅读 Rust 网站上的 Rust 编程指南 发现变量是通过以下方式声明的 let x i32 5 这意味着