how do I increment an integer variable I passed into a function in Scala?

后端 未结 5 1413
深忆病人
深忆病人 2021-01-18 05:34

I declared a variable outside the function like this:

var s: Int = 0

passed it such as this:

def function(s: Int):         


        
相关标签:
5条回答
  • 2021-01-18 05:52

    If you just want to increment a variable starting with 3

    val nextId = { var i = 3; () => { i += 1; i } }

    then invoke it:

    nextId()

    0 讨论(0)
  • 2021-01-18 05:57

    I have also just started using Scala this was my work around.

    var s: Int = 0
    

    def function(s: Int): Boolean={
    
       var newS = s
       newS = newS + 1 
       s = newS
       return true
    
    }
    

    From What i read you are not passing the same "s" into your function as is in the rest of the code. I am sure there is a even better way but this is working for me.

    0 讨论(0)
  • 2021-01-18 06:03

    If you just want continuously increasing integers, you can use a Stream.

    val numberStream = Stream.iterate(0)(_ + 1).iterator
    

    That creates an iterator over a never-ending stream of number, starting at zero. Then, to get the next number, call

    val number: Int = numberStream.next
    
    0 讨论(0)
  • 2021-01-18 06:09

    First of all, I will repeat my words of caution: solution below is both obscure and inefficient, if it possible try to stick with values.

    implicit class MutableInt(var value: Int) {
      def inc() = { value+=1 } 
    }
    
    def function(s: MutableInt): Boolean={
       s.inc() // parentheses here to denote that method has side effects
       return true
    }
    

    And here is code in action:

    scala> val x: MutableInt = 0 
    x: MutableInt = MutableInt@44e70ff
    
    scala> function(x)
    res0: Boolean = true
    
    scala> x.value
    res1: Int = 1
    
    0 讨论(0)
  • 2021-01-18 06:09

    You don't.

    A var is a name that refers to a reference which might be changed. When you call a function, you pass the reference itself, and a new name gets bound to it.

    So, to change what reference the name points to, you need a reference to whatever contains the name. If it is an object, that's easy enough. If it is a local variable, then it is not possible.

    See also call by reference, though I don't think this question is a true duplicate.

    0 讨论(0)
提交回复
热议问题