函数是编程的闭包和迭代器理解

什么是闭包?

闭包是一类特殊的函数。如果一个函数定义在另一个函数的作用域中,并且函数中引用了外部函数的局部变量,那么这个函数就是一个闭包。

1
2
3
4
5
6
7
8
9
10
11
12
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum

$ lazy_sum(1,2,3,4,5)
<function sum at 0x10452f668>
$ lazy_sum(1,2,3,4,5)()
15

Python lambda实现Y组合子

也许你我都难以理解,为什么有人对她痴迷疯狂,铭记在心中不说,还要刻在身上:

她让人绞尽脑汁,也琢磨不定!她让人心力憔悴,又百般回味!

她,看似平淡,却深藏玄机!她,貌不惊人,却天下无敌!

她是谁?

Scala 初探.二(package组织方式)

多个文件的package组织方式

1
2
3
4
5
6
//a.scala 
package com.east
import com.west._
object objectMain extends App{
println("add Function from west used in east, 1+2=%d".format(Add.add(1,2)))
}

Scala 初探.四(sbt组织scala代码2)

package and import

1
2
3
4
5
6
7
├── build.sbt
└── src
└── main
└── scala
├── Interleave.scala
├── utils.scala
└── config.scala

对于同一目录下的两个文件,可以不用import,默认在一个package内

1
2
3
4
5
//Interleave.scala

class A {
val a = new ClassInUtils
}

Scala 初探.三(sbt组织scala代码1)

上一节我们用Makefile来组织scala代码,这里有更好的选择sbt来管理项目
sbt推荐将scala代码放在src路径,如下为标准的组织方式(代码还是原封使用第二节的样例代码)
总共3个文件

1
2
3
4
5
6
7
├── build.sbt
└── src
└── main
└── scala
├── a.scala
├── b.scala
└── c.scala

Scala 初探.一(main函数)

SCALA 程序的几种运行方式

方法1

脚本式的使用,scala a.scala 可正常打印

1
2
3
4
def main() = {
println("Hello, Scala way1")
}
main()

但这种写法不能被 scalac a.scala正确编译,可能JVM对象必须要有个main入口函数