lazy function definitions in scala

后端 未结 6 1605
滥情空心
滥情空心 2021-02-02 16:49

I\'ve been learning scala and I gotta say that it\'s a really cool language. I especially like its pattern matching capabilities and function literals but I come from a javascri

6条回答
  •  我在风中等你
    2021-02-02 17:38

    I known nothing about Ruby, but scala has singleton object pattern also:

    Welcome to Scala version 2.8.0.r22634-b20100728020027 (Java HotSpot(TM) Client VM, Java 1.6.0_20).
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala> object LazyInit {                                       
         |     val msec = { println("Hi,I'm here!");   System.currentTimeMillis }
         | }
    defined module LazyInit
    
    scala> System.currentTimeMillis                                              
    res0: Long = 1282728315918
    
    scala> println(System.currentTimeMillis +" : " + LazyInit.msec)              
    Hi,I'm here!
    1282728319929 : 1282728319930
    
    scala> println(System.currentTimeMillis +" : " + LazyInit.msec)
    1282728322936 : 1282728319930
    
    scala> println(System.currentTimeMillis +" : " + LazyInit.msec)
    1282728324490 : 1282728319930
    
    scala> 
    

    If you want to get function ,you can make it subtype of a function type:

    scala> object LazyFun extends (() => Long) {            
         |     val msec = System.currentTimeMillis          
         |     def apply() = msec                           
         | }
    defined module LazyFun
    
    scala> System.currentTimeMillis                         
    res2: Long = 1282729169918
    
    scala> println(System.currentTimeMillis + " : " + LazyFun())
    1282729190384 : 1282729190384
    
    scala> println(System.currentTimeMillis + " : " + LazyFun())
    1282729192972 : 1282729190384
    
    scala> println(System.currentTimeMillis + " : " + LazyFun())
    1282729195346 : 1282729190384
    

提交回复
热议问题