Scala:了解匿名函数语法

use*_*558 2 scala anonymous-function

我试图弄清楚另一个程序员写的Scala中的自定义迭代器.我无法理解函数声明.它们对我来说看起来像匿名函数,但我根本无法完全绕过它们.

我做了一些关于Scala中的匿名函数的阅读,我发现这个资源[ http://www.scala-lang.org/old/node/133]很有帮助,但我仍然无法阅读上述函数并完全理解它们.

这是代码:

class MyCustomIterator(somePath: Path, someInt: Int, aMaxNumber: Int) {
      def customFilter:(Path) => Boolean = (p) => true
       // Path is from java.nio.files.Path
      def doSomethingWithPath:(Path) => Path = (p) => p
}
Run Code Online (Sandbox Code Playgroud)

我想了解这些了解这些功能.什么是回归类型?这个功能的主体是什么?

.

Jus*_*ony 5

(对于第一个def)冒号后面和等号前面的部分是返回类型.所以,返回类型是:

Path => Boolean
Run Code Online (Sandbox Code Playgroud)

表示功能签名.

现在,打破它,箭头左侧的项目是函数的参数.右侧是函数的返回类型.

因此,它返回一个接受a Path并返回a 的函数Boolean.在这种情况下,它返回一个函数,无论如何都将接受Path并返回true.

第二个def返回一个接受a Path并返回另一个的函数Path(Path在本例中是相同的)

一个示例用法是使用它们如下:

第一种方法:

iter.customFilter(myPath) //returns true
Run Code Online (Sandbox Code Playgroud)

要么

val pathFunction = iter.customFilter;
pathFunction(myPath) //returns true
Run Code Online (Sandbox Code Playgroud)

第二种方法:

iter.doSomethingWithPath(myPath) //returns myPath
Run Code Online (Sandbox Code Playgroud)

要么

val pathFunction = iter.doSomethingWithPath
pathFunction(myPath) //returns myPath
Run Code Online (Sandbox Code Playgroud)