Syntax 如何使用参数和返回类型(如Fn)定义特征?
我被以下代码()弄糊涂了: 结构缓存器 哪里 T:Fn(i32)->i32, { 计算:T, 价值:期权, } 我知道Syntax 如何使用参数和返回类型(如Fn)定义特征?,syntax,rust,closures,traits,Syntax,Rust,Closures,Traits,我被以下代码()弄糊涂了: 结构缓存器 哪里 T:Fn(i32)->i32, { 计算:T, 价值:期权, } 我知道Fn是一个trait,但通常trait没有参数和返回类型。我如何定义像Fn这样的特质 我试着看(实际上是FnOnce,但是Fn有FnMut绑定,FnMut有FnOnce绑定…),但我还是很困惑。那是什么意思;但我不明白: 其中,Fn(a,b,c)->d本身就是不稳定的真实Fn特征的糖 如何使用参数和返回类型(如Fn)定义特征 如果您指的是语法MyTrait(A)->B,则不能。
Fn
是一个trait,但通常trait没有参数和返回类型。我如何定义像Fn
这样的特质
我试着看(实际上是FnOnce
,但是Fn
有FnMut
绑定,FnMut
有FnOnce
绑定…),但我还是很困惑。那是什么意思;但我不明白:
其中,Fn(a,b,c)->d本身就是不稳定的真实Fn
特征的糖
如何使用参数和返回类型(如Fn)定义特征
如果您指的是语法MyTrait(A)->B
,则不能。带有“参数”和“返回类型”的特征是特殊的,仅限于Fn
、FnMut
和FnOnce
特征。这是硬编码到编译器中的。甚至还有一条特定的错误消息:
错误:插入符号仅在与“Fn”-家族特征一起使用时才稳定(见第29625期)
-->src/main.rs:5:8
|
5 | A:MyTrait(A)->B,
| ^^^^^^^^^^^^^^^
也就是说,这种语法被分解为标准的trait语法。您可以从文档中看到FnOnce
是什么:
pub trait FnOnce<Args> {
type Output;
extern "rust-call" fn call_once(self, args: Args) -> Self::Output;
}
发布一次{
类型输出;
extern“rust call”fn call_once(self,args:args)->self::Output;
}
编译器将Fn(A,B,C)->Z
转换为Fn
Args
是标准的trait泛型类型参数,Output
是标准的关联类型。“rust call”
ABI是一种内部编译器机制,它使这一机制更加高效,并且在大多数情况下可以忽略
你完全可以用通用参数和相关类型创建自己的特征。您只是不允许使用插入符号。嘿,这个错误消息可以修改成更通俗的说法吗?类似于你在一个特征中使用了()
,而你本应该使用
?'“插入符号”对我来说意味着diddy@JGFMK鼓励您将此类事项的问题提交到。
pub trait FnOnce<Args> {
type Output;
extern "rust-call" fn call_once(self, args: Args) -> Self::Output;
}