Which of these code styles do you find preferable?

First option using mut with constructor in the beginning:

  let mut post_form = PostInsertForm::new(
    data.name.trim().to_string(),
    local_user_view.person.id,
    data.community_id,
  );
  post_form.url = url.map(Into::into);
  post_form.body = body;
  post_form.alt_text = data.alt_text.clone();
  post_form.nsfw = data.nsfw;
  post_form.language_id = language_id;

Second option without mut and constructor at the end:

  let post_form = PostInsertForm {
    url: url.map(Into::into),
    body,
    alt_text: data.alt_text.clone(),
    nsfw: data.nsfw,
    language_id,
    ..PostInsertForm::new(
      data.name.trim().to_string(),
      local_user_view.person.id,
      data.community_id,
    )
  };

You can see the full PR here: https://github.com/LemmyNet/lemmy/pull/5037/files

You are viewing a single thread.
View all comments View context
13 points

If you’re ever forced to do something the second way, you can also wrap it in braces, that way you end up with an immutable value again:

let app = {
  let mut app = ...
  ...
  app
};
permalink
report
parent
reply
1 point

Thats even more verbose so the second option is better.

permalink
report
parent
reply
6 points

Yeah if you have the second option, use it, but if the struct has private fields it won’t work.

permalink
report
parent
reply
2 points

The first one won’t work either for private fields.

permalink
report
parent
reply
1 point

Why not just a let app = app; line after the let mut app = ...; one?

permalink
report
parent
reply
2 points

A scope groups the initialization visually together, while adding the let app = app; feels like it just adds clutter - I’d probably just leave it mut in that case.

permalink
report
parent
reply
3 points

Rebinding with and without mut is a known and encouraged pattern in rust. Leaving things as mut longer than necessary is not.

permalink
report
parent
reply
1 point

But a scope adds a nesting level which adds a lot more visual clutter.

permalink
report
parent
reply

Rust Programming

!rust@lemmy.ml

Create post

Community stats

  • 172

    Monthly active users

  • 93

    Posts

  • 161

    Comments

Community moderators