斯卡拉。解释{a:Int => INT}

时间:2016-06-08 17:54:40

标签: scala anonymous-function

我是斯卡拉的初学者。

匿名函数语法对我来说很清楚:

(a: Int) => Int

没有括号:a: Int => Int - 编译错误。

但有人可以解释一下这种语法的用途吗?

{a: Int => Int}

另一种形式的匿名函数?

2 个答案:

答案 0 :(得分:6)

我认为你不清楚。

(a: Int) => Int

此行不是某人实际输入的内容。它创建一个匿名函数,该函数接受Int这里命名的a并返回Int类型的对象Int.type,这是Int类的伴随对象

scala> (a: Int) => Int
res0: Int => Int.type = <function1>

这是完全相同的事情,只是包含在无用的块中,它将评估其中唯一的表达式。

{a: Int => Int}

要正确地做事,要定义匿名函数说

val fun = (a: Int) => a + 5

即。放一些应该评估的表达。

您还可以注释此val

的类型
val fun: Int => Int = _ + 5

要定义函数的类型,例如Int => Int

def apply5(f: Int => Int) = f(5)

似乎你混合了这两个概念(匿名函数的定义和函数的类型)。

定义了两个你可以说

apply5(fun)

哪个会有结果10

我认为{a: Int => a + 5}(a: Int) => a + 5之间没有显着差异。实际上两者都很常见。例如,看看在Play中定义一个动作(请求的类型仅用于应用于示例,不需要)

Action { request: Request[AnyContent] =>
  // some more code
  Ok("")
}

答案 1 :(得分:0)

它是一个匿名函数,它接受 /** * Created by Adjoa on 5/29/2016. */ import {Injectable} from "@angular/core"; import {Http,Headers,HTTP_PROVIDERS} from "@angular/http"; import { Headers, RequestOptions } from '@angular/http'; @Injectable() export class SignInService { constructor(private _http: Http){} postData(data:any){ const body = JSON.stringify(data); const headers= new Headers(); headers.append('Content-Type','application/json'); return this._http.post('https://testing-angular-2.firebaseio.com/datatest.json', body, {headers:headers}); } } 类型的单个参数a,丢弃它,并返回表示类型Int的scala对象scala.Int

你可以在scala repl的帮助下轻松地回答这样的问题:

Int