是否可以通过命名参数来调用 Rust 中的函数?

use*_*911 4 rust

我不知道这是否被认为是一种好的编程习惯,但就我个人而言,我发现通过命名函数的参数来调用函数会使代码更具可读性。我不知道这在 Rust 编程语言中是否可行。我在语法中没有找到任何命名的调用表达式:

https://doc.rust-lang.org/reference/expressions/call-expr.html

因此,例如以下不能编译:

fn add(n1 : i32, n2 : i32) -> i32 {
    n1 + n2
}


fn main() {
    let sum_value = add(n1 = 124, n2 = 200);
    println!("sum = {}", sum_value);
}
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是:在 Rust 中是否可以在函数调用中命名参数,如果答案是肯定的,根据 Rust 最佳实践,它是否被认为是一种好的做法?(我是初学者)

环境:

OS: Linux Ubuntu MATE 20.04.1 (64 bits)
rustc --version: rustc 1.46.0 (04488afe3 2020-08-24)
Run Code Online (Sandbox Code Playgroud)

Shi*_*ite 21

一个关于此主题的 RFC 开放

虽然这个 RFC 中并不是每个人都同意,但似乎普遍支持向 Rust 添加命名和默认参数(包括核心团队的支持)。看来主要的障碍不在于概念,而在于实施。

正如 RFC 中所述,替代方案(例如构建器模式)与内置命名参数和默认参数具有相同的问题,而且还添加了大量样板文件。

  • 恕我直言,如果有一天它被实现,它将极大地提高 Rust 程序的可读性和清晰度。感谢您的链接。 (3认同)

Aco*_*orn 8

不,Rust 中没有命名/关键字参数。它们已经讨论了很长时间,但还没有添加它们的具体计划。

如果函数中有很多参数,请考虑传递结构体、构建器模式等。

顺便说一句:该add()示例没有显示为什么命名/关键字参数可能有用,因为这些参数是可以互换的。


Mas*_*inn 7

因此我的问题是:在 Rust 中是否可以在函数调用中命名参数

Rust 不支持命名参数作为语言的一部分。

根据 Rust 最佳实践,它是否被认为是一种好的做法?(我是初学者)

通常不会(相当强的类型通常有助于缓解这个问题)

在真正有用的情况下,两种模式会反复出现:

  • 一个选项 struct,该函数将具有有限数量的简单参数和一个命名结构来传递更多结构化数据,提供“命名”
  • 构建器模式,它是前者的进化版和更文学化的版本(并且更有利于可选参数)

请参阅链接到https://old.reddit.com/r/rust/comments/fg6vrn/for_your_thinkation_an_alternative_to_the/的文章以获取更多信息(我链接到该线程是因为对选项进行了有用的讨论,以及指向有用的板条箱)。