35

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.

2 Answers 2

46

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:

Sign up to request clarification or add additional context in comments.

Comments

13

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?"), } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.