没有参数的Rust函数和一个未使用的参数的函数有什么区别?

Adi*_*omo 1 arguments function rust

制作这样的函数有什么区别:

fn add(_: i32) -> i32 {
    10 + 25
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

fn add() -> i32 {
    10 + 25
}
Run Code Online (Sandbox Code Playgroud)

我意识到第一个函数在被调用时需要一个参数,即使它没有被使用,所以我认为在这种情况下第二个版本应该没问题.

我有什么理由可以使用第一个版本吗?我在Iron的例子中看到了这一点,当时为某条路线实现了一个处理程序.我很困惑为什么在提供空参数应该有效时必须这样做.

Mat*_* M. 5

函数签名是调用者和被调用者之间的契约:

  • 它允许调用者确保它传递的参数是合同指定的参数
  • 它允许被叫方确保它收到的参数是合同规定的参数

并且,更重要的是,它可以强制执行封装边界:调用者不知道被调用者读取或修改了哪些参数,它只知道合同需要什么.

这种封装是驱动因素.设计API是因为某些客户端可能会使用此值,因此会传递它.特定客户端是否使用它客户端的实现细节,并且调用者不会(也不应该)关心.