function - Rust 中的函数原型是什么?
问题描述
我想了解#[inline]
Rust 中属性的行为,所以我正在阅读The Rust Reference 的 Attributes 部分。这很有帮助,但我发现这部分描述令人困惑(强调我的):
该
inline
属性向编译器建议它应该在调用者中放置属性函数的副本,而不是生成代码来调用定义它的函数。这个属性可以用在函数和函数原型上,尽管它对函数原型没有任何作用。
#[cold]
对属性重复此警告。
我从未听说过关于 Rust 使用的术语“函数原型”。我知道 JavaScript 中存在这样的概念,但是 JavaScript 和 Rust 的对象和类型系统非常不同!这里是什么意思?
进一步搜索,我在错误索引中发现了两个函数原型:
E0034
编译器不知道要调用什么方法,因为不止一种方法具有相同的原型。
E0580
main
函数声明不正确。main
函数原型不应该带参数。
在这种情况下,“函数原型”似乎意味着类似于“函数签名”——构成函数外部接口的名称、参数和类型。这似乎也是它在 C/C++ 上下文中的含义。但是,这似乎与上面的用法不符;每个函数定义都以函数的签名开始,因此说将属性放在签名上什么都不做是没有意义的,因为这就是您将属性放在函数上时所做的事情。
在 Rust 的上下文中,术语“函数原型”是什么意思?
解决方案
但是,这似乎与上面的用法不符;每个函数定义都以函数的签名开始,因此说将属性放在签名上什么都不做是没有意义的,因为这就是您将属性放在函数上时所做的事情。
是的,每个函数都以签名开头,但并非每个签名都是函数定义的一部分。也就是说,可以有一个签名,但没有主体(例如在一个特征中),这就是您引用的文档中“原型”的含义。像这样的东西:
trait Foo {
#[inline] // This annotation does nothing
fn foo();
}
推荐阅读
- javascript - 是否可以在数据表的标题下方显示输入字段?
- javascript - 如何为firebase实时数据库js文件添加标题值?
- javascript - 如何根据键组合对象数组中的特定项目:每个对象的值同时保持顺序?
- php - 如果通过按钮访问页面,请勾选复选框
- c# - 从父子表中获取记录......我想从父控制器的父表中访问子表属性
- html - 当我通过单击打开我的 index.html 文件并且没有 lite-server 时,没有任何引导类可以工作 /node.js 和 react/
- php - Laravel 路由名称基于传递的参数
- flutter - Flutter null 安全构造函数
- css - 如何在 calc() 中使用 var()?
- cmake - 是否有使用 CMake 复制 dll 的声明性方法?