码迷,mamicode.com
首页 > 其他好文 > 详细

scala 笔记

时间:2015-05-01 17:21:29      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

 

1. scala 的函数的参数默认都是val类型的

2. _ 参数占位符

3. 偏应用函数,类似于python 函数赋值到另外一个变量:

def sum(a,b,c):
    return a+b+c
sum(1,2,3) // 输出6
a = sum
a(1,2,3) // 输出6

  在scala中:

def sum(a:Int, b:Int, c:Int) = a + b + c

sum(1,2,3) // 输出6
val a = sum _
a(1,2,3) //输出6
val c = a
c(1,2,3) //输出6

  还可以这样用 val b = sum(1, _: Int, 3); b(2) // 输出6

4. 闭包

短文本函数(x:Int)=> x>0, 现在考虑这种情况的短文本函数: (x:Int)=> x>more

more是什么呢? more应该是一个变量,但是没有在该函数文本中定义。x 是一个绑定变量,因为其在函数文本中有定义

与python中类似,闭包返回的是一个函数值,这个函数值的文本中访问了该闭包的局部变量,如

def makeIncreaser(more: Int) = (x: Int) => x + more

闭包makeIncreaser 返回函数值 (x: Int) => x + more, 该函数值访问了闭包的变量more

scala> val inc1 = makeIncreaser(1)

inc1: (Int) => Int = <function>

scala> val inc9999 = makeIncreaser(9999)

inc9999: (Int) => Int = <function>

创建了两个函数。 尽管more 是一个已经返回的函数调用的参数,scala编译器会在堆中重新安排1 和 9999的存在以让返回的函数值去捕获。 除了参数还可以是任意val,var。

 5. 变长参数

   def func(fmt:String, args:Type*) ....

    用 args:Type*表示变长部分,在函数内部,args 会被当做 Array[Type]

 调用时候 : func("format", a , b)

 或者 :  func("format", array: _*)  用  _* 表示把array展开。

 类似于python中: def func(fmt, *args): pass

   func(fmt, *argList)   // py中吧*args 当做tuple

 

6. 尾递归

 在递归函数最后一个动作调用自己的函数,被称为尾递归:tail recursive。Scala编译器检测到尾递归就用新值更新函数参数,然后把它替换成一个回到函数开头的跳转。 注意最后一个动作是调用自身,甚至连自身的偏应用函数都不行。

 

scala 笔记

标签:

原文地址:http://www.cnblogs.com/kuipertan/p/4470841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!