首页 > 解决方案 > 如何使用 println!() 打印命名参数的子项?

问题描述

我了解了在打印时使用命名参数,如下所示:

fn main() {
    println!("{nombre} le gusta el {actividad}",
    nombre= {"Clemente";"Roberto"}, actividad= "futbol");
}

我不知道如何输出“Roberto”而不是“Clemente”。有什么方法可以访问子项吗?说:

{nombre[1]}

标签: rustprintln

解决方案


{"Clemente";"Roberto"}块表达式而不是任何对象或值。这意味着打开和关闭花括号之间的所有内容都被评估为独立语句。它与

fn main() {
    let s = {
        "Clemente";
        "Roberto" // the return value
    }; // s is set to "Roberto"

    println!("{nombre} le gusta el {actividad}",
        nombre=s, actividad= "futbol");
}

因此,当println!评估格式参数时,它只接收返回"Roberto"的内容,这就是打印的内容。该块中的所有其他内容都将丢失,除非来自外部范围的值发生了变异。

如果您打算将两个名称存储在一个集合中,并使用索引打印一个或另一个,则需要定义一个集合和索引:["Clemente", "Roberto"][0]. 您不能在格式化字符串(例如println!({nombre[0]} ...)中索引命名参数,因为它实际上只是一个被关联值替换的名称。

fn main() {
    println!("{nombre} le gusta el {actividad}",
        nombre=["Clemente", "Roberto"][0], actividad="futbol");
}

更好的是,在 the 之前定义集合,println!以便以后更容易阅读和维护!这不仅需要一个建议,而且通常被认为是最佳实践。

fn main() {
    let nombres = ["Clemente", "Roberto"]];

    println!("{nombre} le gusta el {actividad}",
        nombre=nombres[0], actividad="futbol");
}

推荐阅读