Tei*_*raz 2 scala anonymous-function
我是斯卡拉的初学者.
匿名函数语法对我来说很清楚:
(a: Int) => Int,
没有括号:a: Int => Int- 编译错误.
但有人能解释一下这种语法的目的吗?
{a: Int => Int}
只是另一种形式的匿名函数?
我不认为你很清楚.
(a: Int) => Int
Run Code Online (Sandbox Code Playgroud)
这条线不是某人实际打字的东西.它创建一个匿名函数,它在Int此处命名a并返回一个Int类型的对象,Int.type这是Int类的伴随对象.
scala> (a: Int) => Int
res0: Int => Int.type = <function1>
Run Code Online (Sandbox Code Playgroud)
这是完全相同的事情,只是包含在无用的块中,它将评估其中唯一的表达式.
{a: Int => Int}
Run Code Online (Sandbox Code Playgroud)
要正确地做事,要定义匿名函数说
val fun = (a: Int) => a + 5
Run Code Online (Sandbox Code Playgroud)
即放一些应该评估的表达式.
您还可以注释其类型 val
val fun: Int => Int = _ + 5
Run Code Online (Sandbox Code Playgroud)
例如,要定义函数的类型 Int => Int
def apply5(f: Int => Int) = f(5)
Run Code Online (Sandbox Code Playgroud)
看起来你混合了这两个概念(匿名函数的定义和函数的类型).
定义了两个你可以说
apply5(fun)
Run Code Online (Sandbox Code Playgroud)
哪个会有结果 10
我认为{a: Int => a + 5}和之间没有明显的区别(a: Int) => a + 5.实际上两者都很常见.例如,看看在Play中定义一个动作(请求的类型是注释只是为了应用到示例,它是不需要的)
Action { request: Request[AnyContent] =>
// some more code
Ok("")
}
Run Code Online (Sandbox Code Playgroud)