Functions without arguments, with unit as argument in scala

后端 未结 3 1884
無奈伤痛
無奈伤痛 2020-12-07 15:31
def foo(x: Int, f: Unit => Int) = println(f())

foo(2, { Unit => 3 + 4 })

// case 1
def loop: Int = 7
foo(2, loop) // does not compile

changing loop to 
// c         


        
3条回答
  •  無奈伤痛
    2020-12-07 16:16

    ()=>Int is Function0[Int] while Unit=>Int is Function1[Unit,Int]

    scala> val function0: () => Int = () => 5
    function0: () => Int = 
    
    scala> val function1: Unit => Int = u => 5
    function1: (Unit) => Int = 
    
    scala> function0()
    res0: Int = 5
    
    scala> function1("anything")
    res1: Int = 5
    
    scala> function1(100)
    res2: Int = 5
    
    scala>
    

    Also note that () is an object of Unit

    scala> function1(())
    res11: Int = 5
    
    scala> function1 ()
    res12: Int = 5
    
    scala> function1()
    res13: Int = 5
    
    scala> val unit = ()
    unit: Unit = ()
    
    
    scala> function1(unit)
    res15: Int = 5
    
    scala> function1 apply unit
    res16: Int = 5
    
    scala>
    

提交回复
热议问题