Rust 中的函数原型是啥?

     2023-02-27     135

关键词:

【中文标题】Rust 中的函数原型是啥?【英文标题】:What is a function prototype in Rust?Rust 中的函数原型是什么? 【发布时间】:2019-06-05 14:24:57 【问题描述】:

我想了解 Rust 中 #[inline] 属性的行为,所以我正在阅读 the Attributes section of The Rust Reference。这很有帮助,但我发现这部分描述令人困惑(强调我的):

inline 属性向编译器建议它应该在调用者中放置属性函数的副本,而不是生成代码来调用定义它的函数。

这个属性可以用在函数和函数原型上,虽然它对函数原型没有任何作用。

#[cold] 属性重复此警告。

我从未听说过关于 Rust 使用的术语“函数原型”。我知道 JavaScript 中存在这样的概念,但是 JavaScript 和 Rust 的对象和类型系统非常不同!这里是什么意思?

进一步搜索,我在the Error Index 中发现了两个函数原型:

E0034

编译器不知道要调用什么方法,因为不止一个方法具有相同的原型。

E0580

main 函数声明不正确。 main 函数原型不应该带参数。

在这种情况下,“函数原型”似乎意味着类似于“函数签名”——构成函数外部接口的名称、参数和类型。这似乎也是what it means in the context of C/C++。但是,这似乎与上面的用法不符;每个函数定义都以函数的签名开始,因此说将属性放在签名上什么都不做是没有意义的,因为这就是您将属性放在函数上时所做的事情。

术语“函数原型”在 Rust 上下文中是什么意思?

【问题讨论】:

我将其解释为特征声明中的函数签名,没有默认主体 更像 C 中的原型,但没有不方便的地方 ;) 【参考方案1】:

但是,这似乎与上面的用法不符;每个函数定义都以函数的签名开始,因此说将属性放在签名上什么都不做是没有意义的,因为这就是您将属性放在函数上时所做的事情。

是的,每个函数都以签名开头,但并非每个签名都是函数定义的一部分。也就是说,可以有一个签名,但没有主体(例如在一个特征中),这就是您引用的文档中“原型”的含义。像这样的:

trait Foo 
    #[inline] // This annotation does nothing
    fn foo();

【讨论】:

Rust 类型中的 & 符号是啥意思?

】Rust类型中的&符号是啥意思?【英文标题】:Whatdoestheampersand(&)before`self`meaninRust?Rust类型中的&符号是什么意思?【发布时间】:2015-11-0117:20:51【问题描述】:我在Rust文档中看到了这段代码:fneat(&self)println!("isdoneeati... 查看详情

rust 中的 C# Linq“加入”等价物是啥?

】rust中的C#Linq“加入”等价物是啥?【英文标题】:WhatisC#Linq"join"equivalentinrust?rust中的C#Linq“加入”等价物是什么?【发布时间】:2021-03-1101:36:44【问题描述】:我正在尝试对rust中的两个向量执行内部连接,但不知道如... 查看详情

rust-chrono 中的 ParseError(NotEnough) 是啥意思?

】rust-chrono中的ParseError(NotEnough)是啥意思?【英文标题】:WhatdoesParseError(NotEnough)fromrust-chronomean?rust-chrono中的ParseError(NotEnough)是什么意思?【发布时间】:2016-09-2122:56:14【问题描述】:我正在使用rust-chrono,我正在尝试解析这样... 查看详情

Rust 语言中的 &'a 是啥 [重复]

】Rust语言中的&\\\'a是啥[重复]【英文标题】:Whatis&\'ainRustLanguage[duplicate]Rust语言中的&\'a是什么[重复]【发布时间】:2018-05-1808:13:33【问题描述】:我读到here当您需要指定显式生命周期时,共享引用类型被写入&type... 查看详情

Rust 宏中的 tt 元变量类型是啥意思?

】Rust宏中的tt元变量类型是啥意思?【英文标题】:WhatdoesthettmetavariabletypemeaninRustmacros?Rust宏中的tt元变量类型是什么意思?【发布时间】:2017-03-1103:59:00【问题描述】:我正在阅读一本关于Rust的书,并开始使用Rustmacros。除了最... 查看详情

Rust 声明性宏中的 @ 符号是啥意思?

】Rust声明性宏中的@符号是啥意思?【英文标题】:Whatdoesan@symbolmeaninaRustdeclarativemacro?Rust声明性宏中的@符号是什么意思?【发布时间】:2019-06-2117:09:47【问题描述】:我已经看到宏中使用了@符号,但我在RustBook或任何官方文档... 查看详情

Rust 中的 r#""# 运算符是啥?

】Rust中的r#""#运算符是啥?【英文标题】:Whatisther#""#operatorinRust?Rust中的r#""#运算符是什么?【发布时间】:2014-12-2401:18:14【问题描述】:我在Rust中看到了运算符r#"",但我找不到它的作用。它在创... 查看详情

C++:在匿名命名空间中声明函数原型的正确方法是啥?

】C++:在匿名命名空间中声明函数原型的正确方法是啥?【英文标题】:C++:whatistheproperwayofdeclaringfunctionprototypeinanonymousnamespace?C++:在匿名命名空间中声明函数原型的正确方法是什么?【发布时间】:2015-09-0104:44:25【问题描述】... 查看详情

使用 MongoDB 的 Rust 驱动程序访问嵌套结构中的数据的最佳方式是啥,所有这些都是可选的?

】使用MongoDB的Rust驱动程序访问嵌套结构中的数据的最佳方式是啥,所有这些都是可选的?【英文标题】:Whatisthebestwaytoaccessdatawithinnestedstructs,allofwhichareOptionalusingMongoDB\'sRustdriver?使用MongoDB的Rust驱动程序访问嵌套结构中的数据的... 查看详情

测试私有函数的惯用方法是啥?

...但是,如果该功能未标记为“pub”,则我无法从测试模块中的超级模块中看到该功能。那么应该如何测试内部功能呢?我的第一直觉是寻找#ifdef 查看详情

在 Rust 中耗尽 mspc 通道的最佳方法是啥?

...2-01-2100:41:56【问题描述】:我需要遍历当前存储在接收器中的所有值,然后继续执行程序的其余部分,其实现方式如下:loopmatchreceiver.recv_timeout(std::time::Duration:: 查看详情

Rust 中的绝对值函数

】Rust中的绝对值函数【英文标题】:AbsolutevaluefunctioninRust【发布时间】:2017-08-2707:40:45【问题描述】:在这个基本的Rust程序中,一个函数计算一个整数的绝对值,而main()帮助完成一个带有结果的语句:fnmain()letvalue=abs(-4);println!(... 查看详情

Rust 中的默认函数参数

】Rust中的默认函数参数【英文标题】:DefaultfunctionargumentsinRust【发布时间】:2014-07-2517:00:06【问题描述】:是否可以使用默认参数创建函数?fnadd(a:int=1,b:int=2)a+b【问题讨论】:#6973包含几个变通方法(使用结构)。2020年,怎么... 查看详情

Rust 是不是有办法将函数/方法应用于数组或向量中的每个元素?

】Rust是不是有办法将函数/方法应用于数组或向量中的每个元素?【英文标题】:DoesRusthaveawaytoapplyafunction/methodtoeachelementinanarrayorvector?Rust是否有办法将函数/方法应用于数组或向量中的每个元素?【发布时间】:2015-12-2814:07:54【... 查看详情

如何将 C typedef 结构和函数与 Rust 中的结构一起使用?

】如何将Ctypedef结构和函数与Rust中的结构一起使用?【英文标题】:HowtouseaCtypedefstructandfunctionswiththatstructfromRust?【发布时间】:2018-05-3107:12:26【问题描述】:我有这些C文件,我想使用来自Rust的pair_add、add和PAIR。adder.c#include<st... 查看详情

函数原型中的参数名称

】函数原型中的参数名称【英文标题】:Argumentnameinfunctionprototype【发布时间】:2014-07-2718:25:35【问题描述】:在函数声明中,需要三件事,即返回值类型。函数名称。(参数类型)。但参数名称不是必需的。那么为什么这个程... 查看详情

关于js中的原型

我们知道无论什么时候只要创建了一个函数,就会为该函数创建一个prototype属性,这个属性指向函数的原型对象,默认情况下所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含了一个指向prototype属性所在函... 查看详情

js中的原型

一、在js中的构造函数与原型   js中没有类的概念,只是把一个对象实例化,这个对象一般会成为原型对象。js中所以的函数都有一个prototype属性,这个属性引用了一个对象,即原型对象,也简称原型。这个函数包括构... 查看详情