25

I'm about to return a string depending the given argument.

fn hello_world(name:Option<String>) -> String {
    if Some(name) {
        return String::formatted("Hello, World {}", name);
    }
}

This is a not available associated function! - I wanted to make clear what I want to do. I browsed the doc already but couldn't find any string builder functions or something like that.

Shepmaster
  • 388,571
  • 95
  • 1,107
  • 1,366
xetra11
  • 7,671
  • 14
  • 84
  • 159

2 Answers2

36

Use the format! macro:

fn hello_world(name: Option<&str>) -> String {
    match name {
        Some(n) => format!("Hello, World {n}"),
        None => format!("Who are you?"),
    }
}

In Rust, formatting strings uses the macro system because the format arguments are typechecked at compile time, which is implemented through a procedural macro.

There are other issues with your code:

  1. You don't specify what to do for a None - you can't just "fail" to return a value.
  2. The syntax for if is incorrect, you want if let to pattern match.
  3. Stylistically, you want to use implicit returns when it's at the end of the block.
  4. In many (but not all) cases, you want to accept a &str instead of a String.

See also:

Shepmaster
  • 388,571
  • 95
  • 1,107
  • 1,366
10

Since Rust 1.58 it's possible to use named parameters, too.

fn hello_world(name: Option<&str>) -> String {
    match name {
        Some(n) => format!("Hello, World {n}"),
        None => format!("Who are you?"),
    }
}
Raeisi
  • 1,647
  • 1
  • 6
  • 18