【问题标题】:Is there a way to specify the return type of an Scala function literal?有没有办法指定 Scala 函数文字的返回类型?
【发布时间】:2017-09-08 13:15:46
【问题描述】:

我想知道是否可以指定函数文字的返回类型。例如我有

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

我知道 Scala 会进行类型推断来查找返回类型,但我想显式指定类型,以便编译器更早地捕获错误。

当然我可以强制检查

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

但是可以直接在函数字面量上指定吗?

【问题讨论】:

  • (x: Int) => x*2.0?或(x: Int) => (x*2): Double
  • 您甚至可以在大括号中的块上使用类型归属:(x: Int) => { ... tons of code ... }: Double
  • 完美,谢谢,这正是我想要的,我想不通。让它成为一个答案,我会接受它!

标签: scala


【解决方案1】:

“指定类型”称为type ascription。因此,如果函数字面量应该是 Int => Double 类型(采用一个 Int 参数并返回一个 Double),那么您可以像这样指定它:

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

如前所述,Scala 确实进行类型推断,因此实际上并不需要类型归属,但如果您想“提示”类型检查器有关预期类型的​​信息,您可以这样做。但正如文档中提到的类型归属并不常用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2020-03-10
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多