2010-06-26 60 views

回答

4

正如Advantages of Scala’s Type System提到的,它是一个功能型

文章Scala for Java Refugees Part 6: Getting Over Java在其“高阶函数”部分描述了该语法。

def itrate(array:Array[String], fun:(String)=>Unit) = { 
    for (i <- 0 to (array.length - 1)) { // anti-idiom array iteration 
    fun(array(i)) 
    } 
} 

val a = Array("Daniel", "Chris", "Joseph", "Renee") 
iterate(a, (s:String) => println(s)) 

看到了吗?语法很自然,你几乎会错过它。
从顶部开始,我们查看类型的有趣参数,我们看到(type1, …)=>returnType语法,它指示了一种功能类型。
在这种情况下,fun将是一个函数,它接受String类型的单个参数并返回Unit(实际上是void,所以什么都没有)。
在函数的两行中,我们看到了实际调用函数的语法。对待fun就好像它是范围内可用的方法一样,调用语法是相同的。
C/C++黑暗时代的退伍军人会认识到这种语法让人联想到函数指针如何在当天处理。
区别在于,不需要担心内存泄漏,也不需要太多明星符号引入过度冗余。


你的情况:def func(arg: String => Int): Unitarg将是一个函数取一个字符串并返回一个int。

9

简短的回答

其接收一个字符串并返回一个诠释

龙答案

功能在斯卡拉,职能是一等公民。这意味着你可以将它们存储在变量中或者(像这样)将它们作为参数传递。

这是一个函数文字看上去象

() => Unit 

这怎么就是不接收参数和返回股(Java的等同于无效)的功能。

这将是接收字符串作为参数,并返回一个int的函数:

(String) => Int 

此外,斯卡拉让我们在您的例子下降括号作为语法糖的形式,等等。前面的arg:只是参数的名称。

里面func你会调用该函数接受(arg)是这样的:

val result = arg("Some String") // this returns a Int 
+0

你的意思是'arg'是一个函数...。对? – 2010-06-26 18:05:43

+0

是的,让我编辑和澄清 – 2010-06-26 18:07:09

4

您也可能会看到它写的(可能由反编译)作为

def func(arg: Function1[String, Int]): Unit = { 
    // body of function 
} 

他们是完全等效。