我是斯卡拉的初学者。
匿名函数语法对我来说很清楚:
(a: Int) => Int
,
没有括号:a: Int => Int
- 编译错误。
但有人可以解释一下这种语法的用途吗?
{a: Int => Int}
另一种形式的匿名函数?
答案 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