scala学习笔记(1)

由于有SML的底子,学习scala的过程也比较顺利。scala很多概念和sml是共通的,在这里记录一下学习中的一点心得。
  • scala是纯OO的语言,语言中所有的元素都是对象。数字是对象,函数也是对象。scala里所有对象的基类是Any,AnyVal是所有值类型对象的父类,包装了JVM中的值对象(int, boolean, float...),AnyRef是所有其他对象的父类,除了能够使用所有Java的类以外,Scala扩展了List、Symbol、Ordered几个比较有用的工具类。
  • scala 代码
    1. // 数字是对象   
    2. scala> 1+2  
    3. unnamed9: Int = 3  
    4. // 1+ 是匿名函数,1是对象,+是方法,在scalal里是可以重载运算符的   
    5. scala> var f: int=>int = (1+)   
    6. f: (int) => int = <function></function>   
    7. scala> f(2)   
    8. unnamed10: int = 3  
  • scala支持匿名函数。匿名函数其实是从内置的scala模块中派生的。
  • scala 代码
    1. scala> ( (para:String) => println("hello " + para) ) ("world!")   
    2. hello world!   
    3. unnamed11: Unit = ()   
    4.   
    5. // 下面的写法和上面其实是等价的   
    6. scala> var fn = new ( String=>Unit ) { def apply(para:String):Unit = println("he  
    7. llo" + para) }   
    8. fn: AnyRef with (String) => Unit = <function></function>   
    9.   
    10. scala> fn(" world!")   
    11. hello world!   
    12. unnamed23: Unit = ()  
  •   scala的匿名函数可以作为参数或者结果返回
  • scala 代码
    1. // 模仿sml的中缀复合函数,具体语法还需要斟酌   
    2. // TODO: 利用impllit def把o函数插入到匿名函数对象中,实现与sml语法形式上的一样 (f o g) x = f(g(x))   
    3.   
    4. scala> trait o[A, B, C] {   
    5.   def apply(f: B=>C, g: A=>B): A=>C = { ( (x:A) => f(g(x))) }   
    6. }   
    7.   
    8. scala> (new o[int,int,int]{}) ( (x=>x/3), (x=>x+1))(2)   
    9. unnamed27: int = 1  
  •  scala支持partial function, currying function以及call by name
  • scala 代码
    1. // currying & partial     
    2.       
    3. scala> def curry(a:int)(b:int) = a+b       
    4. curry: (int)(int)Int       
    5.       
    6. scala> curry(1)(2)       
    7. unnamed28: Int = 3      
    8.       
    9. scala> var f = curry(1)_       
    10. f: (int) => Int =        
    11.       
    12. scala> f(2)       
    13. unnamed29: Int = 3      
    14.       
    15. // call by name   
    16.   
    17. scala> def infloop:int = infloop   
    18. infloop: int  
    19.   
    20. scala> def callbyname(x:int, y: => int) = 1  
    21. callbyname: (int,=> int)Int   
    22.   
    23. scala> callbyname(12, infloop)   
    24. unnamed31: Int = 1  
    25.   
    26. scala> def callbyvalue(x:int, y:int) = 1  
    27. callbyname: (int,=> int)Int   
    28.   
    29. // 死循环....   
    30. scala> callbyvalue(12, infloop)   

  Scala的特性太多了,以后慢慢记录吧。包括case class, bouned generic, Option class, Implicit type, ADT, type sharing constraint, xml, actor, list等等。

你可能感兴趣的:(scala,Scheme,F#,OO,FP)