Types 理解类型归属问题

Types 理解类型归属问题,types,rust,integration-testing,Types,Rust,Integration Testing,很抱歉,我太迷茫了,不知道该如何回答这个问题。如果你有一个更好的标题的建议,请让我知道 我输入了ascription,发现它是一种用我们想要的类型对表达式进行注释的能力 我定义了以下特征和功能。根据我有限的理解,我将类型指定为u16: //src/range.rs 发布结构范围{ 酒吧名:u16, 酒吧最大:u16, 发布时间:u16 } impl范围{ 发布fn新(最小值:u16,最大值:u16,当前值:u16)->Self{ 范围{min,max,current} } 接下来,我想在集成测

很抱歉,我太迷茫了,不知道该如何回答这个问题。如果你有一个更好的标题的建议,请让我知道

我输入了ascription,发现它是一种用我们想要的类型对表达式进行注释的能力

我定义了以下特征和功能。根据我有限的理解,我将类型指定为
u16

//src/range.rs
发布结构范围{
酒吧名:u16,
酒吧最大:u16,
发布时间:u16
}
impl范围{
发布fn新(最小值:u16,最大值:u16,当前值:u16)->Self{
范围{min,max,current}
}
接下来,我想在集成测试中测试
new()

//测试/集成\u tests.rs
使用界限::范围::范围;
#[测试]
fn新_限制(){
assert_eq!(范围{min:1,max:6,游标:1},范围::new(min:1,max:6,游标:1));
当我特别将结构定义为u16时,为什么编译器会对类型感到困惑?我也尝试显式编写
1u16

我收到以下错误:

error: expected type, found `1`
 --> tests/integration_test.rs:5:70
  |
5 |     assert_eq!(Confine{min: 1, max: 6, cursor: 1}, Confine::new(min: 1, max: 6, cursor: 1));
  |                                                                    - ^ expected type
  |                                                                    |
  |                                                                    tried to parse a type due to this type ascription
  |


这是初始化结构和在Rust中调用函数之间的主要区别。初始化结构时,字段是命名的(假设结构具有命名字段),但函数当前不支持命名参数

要调用
Confine::new
,只需省去
min:
max:
光标:

assert\u eq(
范围{min:1,max:6,游标:1},
范围:新(1,6,1)
);

现在来解释错误。函数的参数是逗号分隔的表达式列表,因此(例如,
min:1
被解析为表达式。在
之前,这一切正常。包含
的表达式(至少在该位置)必须是类型归属(不稳定,但仍在语法中实现)。这意味着
min:1
的其余部分必须是一个类型,因此
1
被解析为一个类型。这显然是错误的,因为
1
是一个整数,而不是一个类型

所有这些都和参数的实际类型无关。只要有上面的
(1,6,1)
,就足以推断它们是
u16


顺便说一句,可以利用结构和函数之间的这种区别来提供类似命名参数的内容。函数不单独获取参数,而是将结构作为其唯一的参数。然后在调用函数时,使用其命名字段初始化结构并将其传递给函数。还有更多复杂之处你可以朝这个方向做一些事情,但这是最基本的