作者fcamel (飞啊!啊哈的小骆驼!!)
看板PLT
标题Re: [比较] 我为何锺情於用 Scala 做为兵刃(三)
时间Mon Feb 21 02:44:03 2011
※ 引述《brianhsu (坟墓)》之铭言:
: 方法就是一般的 Java 物件的方法,那函数又是什麽呢?!
: 答案是:物件!
: 是滴,你没看错,在 Scala 中函数是单单纯纯的物件,是一个实做了
: FunctionN[T1..TN+1] 这个介面(用 Scala 的术语来讲是 Trait)的物件。
: 上面那个的程式其实可以写成下面这样:
: ====================== 我是 Scala 程式分隔线 =========================
: // new 一个这个 class 出来就是函数了,别怀疑
: class Square extends Function1[Int, Int] {
: override def apply(n: Int) = n * n
: }
: class IsGreaterThan5 extends Function[Int, Boolean] {
: override def apply(n: Int) = n > 5
: }
: val xs = List(-1, -2, -3, 0, 1, 2, 3)
: val result = xs.map(new Square).filter(new IsGreaterThan5).length
: println (result)
: ======================================================================
: 看见了吧?我觉得这真的是 Scala 让我吓到了的一点,没料到他竟然会用
: 物件来实作出函数这个东西,而有了上面这样的对应之後,其实我发现
: High order function 忽然之间就变得超级好理解了--不过就是呼叫了参
: 数物件的 apply 方法嘛!
: 如何,现在有没有想到如何自己实作出一个类似 map 的东西呢?其实很简单:
多谢分享, 这几篇真有趣, 一直想找时间碰 Scala 的说
Python 也有类似的设计, function 也是 object,
object 也能当 function 用
def add(x, y):
return x + y
print type(add) # <type 'function'>
print add(2, 5) # 7
print add.__call__(2, 5) # 7
class Add(object):
def __call__(self, x, y):
return x + y
obj_add = Add()
print type(obj_add) # <class '__main__.Add'>
print obj_add(2, 5) # 7
print obj_add.__call__(2, 5) # 7
ps. Python 主程式的 module 会用 __main__ 表示,
--
fcamel / chlo's Blog - 自强不息的骆驼有草吃
http://fcamel.twbbs.org/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.43.214.127
※ 编辑: fcamel 来自: 114.43.214.127 (02/21 02:45)