What does 'let x = x' do in Rust?












24















I saw this code in the wild:



fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;


What does the let fields = fields; line do? Why is it there?










share|improve this question

























  • This line feel so nice! "Let fields be fields!"

    – val
    1 hour ago
















24















I saw this code in the wild:



fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;


What does the let fields = fields; line do? Why is it there?










share|improve this question

























  • This line feel so nice! "Let fields be fields!"

    – val
    1 hour ago














24












24








24








I saw this code in the wild:



fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;


What does the let fields = fields; line do? Why is it there?










share|improve this question
















I saw this code in the wild:



fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;


What does the let fields = fields; line do? Why is it there?







rust






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 7 hours ago









Shepmaster

153k14301441




153k14301441










asked 8 hours ago









timtheliontimthelion

718920




718920













  • This line feel so nice! "Let fields be fields!"

    – val
    1 hour ago



















  • This line feel so nice! "Let fields be fields!"

    – val
    1 hour ago

















This line feel so nice! "Let fields be fields!"

– val
1 hour ago





This line feel so nice! "Let fields be fields!"

– val
1 hour ago












2 Answers
2






active

oldest

votes


















35














It makes fields immutable again.



fields was previously defined as mutable (let mut fields = …;), to be used with sort_by_key which sorts in-place and requires the target to be mutable. The author has chosen here to explicitly prevent further mutability.



"Downgrading" a mutable binding to immutable is quite common in Rust.



Another common way to do this is to use a block expression:



let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};





share|improve this answer

































    6














    The statement let var = var; makes var immutable and bound to its current value. fields was declared as mut earlier.






    share|improve this answer























      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54595345%2fwhat-does-let-x-x-do-in-rust%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      35














      It makes fields immutable again.



      fields was previously defined as mutable (let mut fields = …;), to be used with sort_by_key which sorts in-place and requires the target to be mutable. The author has chosen here to explicitly prevent further mutability.



      "Downgrading" a mutable binding to immutable is quite common in Rust.



      Another common way to do this is to use a block expression:



      let fields = {
      let mut fields = …;
      fields.sort_by_key(…);
      fields
      };





      share|improve this answer






























        35














        It makes fields immutable again.



        fields was previously defined as mutable (let mut fields = …;), to be used with sort_by_key which sorts in-place and requires the target to be mutable. The author has chosen here to explicitly prevent further mutability.



        "Downgrading" a mutable binding to immutable is quite common in Rust.



        Another common way to do this is to use a block expression:



        let fields = {
        let mut fields = …;
        fields.sort_by_key(…);
        fields
        };





        share|improve this answer




























          35












          35








          35







          It makes fields immutable again.



          fields was previously defined as mutable (let mut fields = …;), to be used with sort_by_key which sorts in-place and requires the target to be mutable. The author has chosen here to explicitly prevent further mutability.



          "Downgrading" a mutable binding to immutable is quite common in Rust.



          Another common way to do this is to use a block expression:



          let fields = {
          let mut fields = …;
          fields.sort_by_key(…);
          fields
          };





          share|improve this answer















          It makes fields immutable again.



          fields was previously defined as mutable (let mut fields = …;), to be used with sort_by_key which sorts in-place and requires the target to be mutable. The author has chosen here to explicitly prevent further mutability.



          "Downgrading" a mutable binding to immutable is quite common in Rust.



          Another common way to do this is to use a block expression:



          let fields = {
          let mut fields = …;
          fields.sort_by_key(…);
          fields
          };






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 7 hours ago

























          answered 8 hours ago









          mcartonmcarton

          6,43112535




          6,43112535

























              6














              The statement let var = var; makes var immutable and bound to its current value. fields was declared as mut earlier.






              share|improve this answer




























                6














                The statement let var = var; makes var immutable and bound to its current value. fields was declared as mut earlier.






                share|improve this answer


























                  6












                  6








                  6







                  The statement let var = var; makes var immutable and bound to its current value. fields was declared as mut earlier.






                  share|improve this answer













                  The statement let var = var; makes var immutable and bound to its current value. fields was declared as mut earlier.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 8 hours ago









                  Govind ParmarGovind Parmar

                  9,54553258




                  9,54553258






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54595345%2fwhat-does-let-x-x-do-in-rust%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Polycentropodidae

                      Magento 2 Error message: Invalid state change requested

                      Paulmy