2017-09-08 50 views
3

我想知道是否可以指定函数文本的返回类型。比如我有有没有办法指定一个Scala函数文本的返回类型?

(x:Int) => x * 2 // scala infers the type Int => Int 
((x:Int) => Double) => x * 2 // does NOT compile 

我知道,斯卡拉会做类型推断找到返回类型,但我想,这样编译器捕获错误早期明确指定类型。

当然我可以强制通过

val a: Int => Int = (x: Int) => x * 2 

支票但是,它可以指定直接函数文本?

+4

'(x:Int)=> x * 2.0'?或'(x:Int)=>(x * 2):Double' – Dima

+5

你甚至可以在大括号的块中使用类型归属:'(x:Int)=> {...吨代码...}:Double ' –

+1

完美,谢谢,这正是我所期待的,我无法弄清楚。让它成为答案,我会接受它! – ecerulm

回答

0

“指定类型”被称为type ascription。所以,如果直译的功能应该是Int => Double型(带一个int型参数,并返回一个双人间),那么你可以像这样指定它:

(x: Int) => { x * 2.0 }:Double 

如前所述斯卡拉做类型推断所以是不是真的需要的类型归属,但如果你想“提示”类型检查器的预期类型,你可以做到这一点。但正如文件中提到的类型归属不常用。

相关问题