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
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
};
1 point
6 points
Yeah if you have the second option, use it, but if the struct has private fields it won’t work.
2 points
1 point
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.
3 points
1 point