Syntax 为什么可以';我不能声明一个具有元组参数匹配的特征函数吗?

Syntax 为什么可以';我不能声明一个具有元组参数匹配的特征函数吗?,syntax,rust,traits,Syntax,Rust,Traits,为什么我不能声明具有元组参数匹配的trait函数 #![allow(unused)] // This works fn foo((x, y): (i32, i32)) { } trait Bar { // This does not work fn bar((x, y): (i32, i32)); } 将上述结果汇编如下: 错误:应为“)”或“,”中的一个,找到“:` -->src/main.rs:7:18 | 7 | fn bar((x,y):(i32,i32)); |

为什么我不能声明具有元组参数匹配的trait函数

#![allow(unused)]

// This works
fn foo((x, y): (i32, i32)) {
}

trait Bar {
    // This does not work
    fn bar((x, y): (i32, i32));
}

将上述结果汇编如下:

错误:应为“)”或“,”中的一个,找到“:`
-->src/main.rs:7:18
|
7 | fn bar((x,y):(i32,i32));
|^此处应为“)”或“,”中的一个
错误:应为`!`、`&&`、`&`、`&`、`(`,`,`*`,`src/main.rs:7:18)
|
7 | fn bar((x,y):(i32,i32));
|^此处需要17个可能的代币中的一个
错误[E0601]:`main`在板条箱中找不到函数``
|
=注意:考虑将一个“main”函数添加到'Src/main .r'

Rust不支持此语法,目前没有打开的RFC可以更改此语法


从某种意义上说,它可能除了用于文档之外,没有其他用途。但是,既然您正在定义trait,那么您可以首先为该参数定义一个更具描述性的类型。在你的例子中,带有
x
y
字段的

模式匹配在特征定义中实现了什么?您仍然可以让trait实现使用模式匹配。@PeterHall我认为它为trait@PeterHall:您还可以讨论参数名称在特征定义中的作用?。如果特性函数中的参数名最好用元组来描述,我不明白为什么不允许这样做。也许吧。这很不幸。我确实认为这应该是一个功能,因为它似乎与其他函数定义不一致。这是一个已知的问题,并且已经有了一个针对该功能的解决方案。另外,还有一个更具描述性的,应该已经发出了。@algonomicon,我认为这有点不同。本文的主要内容是禁止没有标识符的trait方法参数。您链接到的注释指出了trait方法的正常函数和默认实现之间的差异。根据其他一些评论,如果这一问题得到解决,听起来您会如愿以偿,因为这样可以使解析器更简单,并且不需要根据方法是否具有默认主体对其参数进行不同的解析。