Incrementing and getting value

前端 未结 3 1447
予麋鹿
予麋鹿 2021-01-13 11:04

Simple scala question. Consider the below.

scala> var mycounter: Int = 0;
mycounter: Int = 0

scala> mycounter += 1

scala> mycounter
res1: Int = 1
         


        
相关标签:
3条回答
  • 2021-01-13 11:25

    Using '+=' return Unit, so you should do:

    { mycounter += 1; mycounter }
    

    You can too do the trick using a closure (as function parameters are val):

    scala> var x = 1
    x: Int = 1
    
    scala> def f(y: Int) = { x += y; x}
    f: (y: Int)Int
    
    scala> f(1)
    res5: Int = 2
    
    scala> f(5)
    res6: Int = 7
    
    scala> x
    res7: Int = 7
    

    BTW, you might consider using an immutable value instead, and embrace this programming style, then all your statements will return something ;)

    0 讨论(0)
  • 2021-01-13 11:26

    Assignment is an expression that is evaluated to Unit. Reasoning behind it can be found here: What is the motivation for Scala assignment evaluating to Unit rather than the value assigned?

    In Scala this is usually not a problem because there probably is a different construct for the problem you are solving.

    I don't know your exact use case, but if you want to use the incrementation it might be in the following form:

    (1 to 10).foreach { i => 
      // do something with i
    }
    
    0 讨论(0)
  • 2021-01-13 11:39

    Sometimes I do this:

    val nextId = { var i = 0; () => { i += 1; i} }
    println(nextId())                               //> 1
    println(nextId())                               //> 2
    

    Might not work for you if you need sometime to access the value without incrementing.

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