Problem in converting from for-comprehension to map












0















I'm trying to convert a Scala for comprehension into using map and I'm running into a problem.



For illustration, consider that following conversion that works as expected.



scala> for (i <- 0 to 10) yield i * 2
res0: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

scala> 0 to 10 map { _ * 2 }
res1: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)


However, the following isn't working. What mistake am I making?



scala> import util.Random
import util.Random

scala> for (i <- 0 to 10) yield Random.nextInt(10)
res2: scala.collection.immutable.IndexedSeq[Int] = Vector(3, 0, 7, 5, 9, 4, 6, 6, 6, 3, 0)

scala> 0 to 10 map { Random.nextInt(10) }
<console>:13: error: type mismatch;
found : Int
required: Int => ?
0 to 10 map { Random.nextInt(10) }
^


The root cause might be either my inability to correctly decipher the error message or fixing the cause. As I review the signature of Random.nextInt it seems to be returning an Int.



scala> Random.nextInt
def nextInt(n: Int): Int def nextInt(): Int


Error message is saying that I need to provide a function that takes an Int and returns "something" (not sure what ? stands for).



required: Int => ?


So I can see that there is a mismatch. But how do I convert what I want to happen -- a call to Random.nextInt(10) -- into a function and pass it to map?



Any help in understanding the error message below would be appreciated.



scala> 0 to 10 map { Random.nextInt(10) }
<console>:13: error: type mismatch;
found : Int
required: Int => ?
0 to 10 map { Random.nextInt(10) }
^


(Edit)



Doing the following helped.



scala> def foo(x: Int): Int = Random.nextInt(10)
foo: (x: Int)Int

scala> 0 to 10 map { foo }
res10: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 1, 7, 6, 5, 1, 6, 0, 7, 4)


But comments on this or suggestions of recommended Scala-way to do this would be appreciated.










share|improve this question





























    0















    I'm trying to convert a Scala for comprehension into using map and I'm running into a problem.



    For illustration, consider that following conversion that works as expected.



    scala> for (i <- 0 to 10) yield i * 2
    res0: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

    scala> 0 to 10 map { _ * 2 }
    res1: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)


    However, the following isn't working. What mistake am I making?



    scala> import util.Random
    import util.Random

    scala> for (i <- 0 to 10) yield Random.nextInt(10)
    res2: scala.collection.immutable.IndexedSeq[Int] = Vector(3, 0, 7, 5, 9, 4, 6, 6, 6, 3, 0)

    scala> 0 to 10 map { Random.nextInt(10) }
    <console>:13: error: type mismatch;
    found : Int
    required: Int => ?
    0 to 10 map { Random.nextInt(10) }
    ^


    The root cause might be either my inability to correctly decipher the error message or fixing the cause. As I review the signature of Random.nextInt it seems to be returning an Int.



    scala> Random.nextInt
    def nextInt(n: Int): Int def nextInt(): Int


    Error message is saying that I need to provide a function that takes an Int and returns "something" (not sure what ? stands for).



    required: Int => ?


    So I can see that there is a mismatch. But how do I convert what I want to happen -- a call to Random.nextInt(10) -- into a function and pass it to map?



    Any help in understanding the error message below would be appreciated.



    scala> 0 to 10 map { Random.nextInt(10) }
    <console>:13: error: type mismatch;
    found : Int
    required: Int => ?
    0 to 10 map { Random.nextInt(10) }
    ^


    (Edit)



    Doing the following helped.



    scala> def foo(x: Int): Int = Random.nextInt(10)
    foo: (x: Int)Int

    scala> 0 to 10 map { foo }
    res10: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 1, 7, 6, 5, 1, 6, 0, 7, 4)


    But comments on this or suggestions of recommended Scala-way to do this would be appreciated.










    share|improve this question



























      0












      0








      0








      I'm trying to convert a Scala for comprehension into using map and I'm running into a problem.



      For illustration, consider that following conversion that works as expected.



      scala> for (i <- 0 to 10) yield i * 2
      res0: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

      scala> 0 to 10 map { _ * 2 }
      res1: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)


      However, the following isn't working. What mistake am I making?



      scala> import util.Random
      import util.Random

      scala> for (i <- 0 to 10) yield Random.nextInt(10)
      res2: scala.collection.immutable.IndexedSeq[Int] = Vector(3, 0, 7, 5, 9, 4, 6, 6, 6, 3, 0)

      scala> 0 to 10 map { Random.nextInt(10) }
      <console>:13: error: type mismatch;
      found : Int
      required: Int => ?
      0 to 10 map { Random.nextInt(10) }
      ^


      The root cause might be either my inability to correctly decipher the error message or fixing the cause. As I review the signature of Random.nextInt it seems to be returning an Int.



      scala> Random.nextInt
      def nextInt(n: Int): Int def nextInt(): Int


      Error message is saying that I need to provide a function that takes an Int and returns "something" (not sure what ? stands for).



      required: Int => ?


      So I can see that there is a mismatch. But how do I convert what I want to happen -- a call to Random.nextInt(10) -- into a function and pass it to map?



      Any help in understanding the error message below would be appreciated.



      scala> 0 to 10 map { Random.nextInt(10) }
      <console>:13: error: type mismatch;
      found : Int
      required: Int => ?
      0 to 10 map { Random.nextInt(10) }
      ^


      (Edit)



      Doing the following helped.



      scala> def foo(x: Int): Int = Random.nextInt(10)
      foo: (x: Int)Int

      scala> 0 to 10 map { foo }
      res10: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 1, 7, 6, 5, 1, 6, 0, 7, 4)


      But comments on this or suggestions of recommended Scala-way to do this would be appreciated.










      share|improve this question
















      I'm trying to convert a Scala for comprehension into using map and I'm running into a problem.



      For illustration, consider that following conversion that works as expected.



      scala> for (i <- 0 to 10) yield i * 2
      res0: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

      scala> 0 to 10 map { _ * 2 }
      res1: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)


      However, the following isn't working. What mistake am I making?



      scala> import util.Random
      import util.Random

      scala> for (i <- 0 to 10) yield Random.nextInt(10)
      res2: scala.collection.immutable.IndexedSeq[Int] = Vector(3, 0, 7, 5, 9, 4, 6, 6, 6, 3, 0)

      scala> 0 to 10 map { Random.nextInt(10) }
      <console>:13: error: type mismatch;
      found : Int
      required: Int => ?
      0 to 10 map { Random.nextInt(10) }
      ^


      The root cause might be either my inability to correctly decipher the error message or fixing the cause. As I review the signature of Random.nextInt it seems to be returning an Int.



      scala> Random.nextInt
      def nextInt(n: Int): Int def nextInt(): Int


      Error message is saying that I need to provide a function that takes an Int and returns "something" (not sure what ? stands for).



      required: Int => ?


      So I can see that there is a mismatch. But how do I convert what I want to happen -- a call to Random.nextInt(10) -- into a function and pass it to map?



      Any help in understanding the error message below would be appreciated.



      scala> 0 to 10 map { Random.nextInt(10) }
      <console>:13: error: type mismatch;
      found : Int
      required: Int => ?
      0 to 10 map { Random.nextInt(10) }
      ^


      (Edit)



      Doing the following helped.



      scala> def foo(x: Int): Int = Random.nextInt(10)
      foo: (x: Int)Int

      scala> 0 to 10 map { foo }
      res10: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 1, 7, 6, 5, 1, 6, 0, 7, 4)


      But comments on this or suggestions of recommended Scala-way to do this would be appreciated.







      scala for-comprehension






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 1 at 22:09







      Alok Lal

















      asked Jan 1 at 22:03









      Alok LalAlok Lal

      6018




      6018
























          1 Answer
          1






          active

          oldest

          votes


















          4














          The Int => ? in the error message means than the compiler expects to see a function from Int to some other type (?). But Random.nextInt(10) is not a function, it's just an Int. You have to take an integer parameter:



          0 to 10 map { i => Random.nextInt(10) }


          You can also explicitly ignore the argument:



          0 to 10 map { _ => Random.nextInt(10) }


          or, even better, just use fill:



          Vector.fill(10){ Random.nextInt(10) }





          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%2f53999293%2fproblem-in-converting-from-for-comprehension-to-map%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            4














            The Int => ? in the error message means than the compiler expects to see a function from Int to some other type (?). But Random.nextInt(10) is not a function, it's just an Int. You have to take an integer parameter:



            0 to 10 map { i => Random.nextInt(10) }


            You can also explicitly ignore the argument:



            0 to 10 map { _ => Random.nextInt(10) }


            or, even better, just use fill:



            Vector.fill(10){ Random.nextInt(10) }





            share|improve this answer




























              4














              The Int => ? in the error message means than the compiler expects to see a function from Int to some other type (?). But Random.nextInt(10) is not a function, it's just an Int. You have to take an integer parameter:



              0 to 10 map { i => Random.nextInt(10) }


              You can also explicitly ignore the argument:



              0 to 10 map { _ => Random.nextInt(10) }


              or, even better, just use fill:



              Vector.fill(10){ Random.nextInt(10) }





              share|improve this answer


























                4












                4








                4







                The Int => ? in the error message means than the compiler expects to see a function from Int to some other type (?). But Random.nextInt(10) is not a function, it's just an Int. You have to take an integer parameter:



                0 to 10 map { i => Random.nextInt(10) }


                You can also explicitly ignore the argument:



                0 to 10 map { _ => Random.nextInt(10) }


                or, even better, just use fill:



                Vector.fill(10){ Random.nextInt(10) }





                share|improve this answer













                The Int => ? in the error message means than the compiler expects to see a function from Int to some other type (?). But Random.nextInt(10) is not a function, it's just an Int. You have to take an integer parameter:



                0 to 10 map { i => Random.nextInt(10) }


                You can also explicitly ignore the argument:



                0 to 10 map { _ => Random.nextInt(10) }


                or, even better, just use fill:



                Vector.fill(10){ Random.nextInt(10) }






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 1 at 22:09









                Andrey TyukinAndrey Tyukin

                29.4k42351




                29.4k42351
































                    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%2f53999293%2fproblem-in-converting-from-for-comprehension-to-map%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

                    MongoDB - Not Authorized To Execute Command

                    in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

                    How to fix TextFormField cause rebuild widget in Flutter