当前位置: 首页 > 知识库问答 >
问题:

在Scala中指定lambda返回类型

令狐功
2023-03-14

注意:这是一个理论性的问题,我并不试图修复任何东西,也不试图为了实际目的达到任何效果

在Scala中使用<code>(参数)创建lambda时=

Lambdas与方法没有什么不同,它们都被指定为表达式,但就我的理解,方法的返回类型很容易用< code > def name(arguments):return type = expression 语法来定义。

考虑这个(说明性的)例子:

def sequence(start: Int, next: Int=>Int): ()=>Int = {
    var x: Int = start

    //How can I denote that this function should return an integer?    
    () => {
        var result: Int = x
        x = next(x)
        result
    }
}

共有3个答案

荆钱明
2023-03-14
x => x:SomeType

我自己不知道答案,因为我从来不需要它,但我的直觉是,这将起作用。在工作表中尝试证实了这一点。

编辑:上面有例子之前我就提供了这个答案。在具体的例子中确实不需要这样。但是在极少数需要的情况下,我展示的语法会起作用。

郭永安
2023-03-14

假设你有这个功能:

def mulF(a: Int, b: Int): Long = {
      a.toLong * b
}

同样的函数可以写成lambda,并定义输入和输出类型:

val mulLambda: (Int, Int) => Long = (x: Int, y: Int) => { x.toLong * y }
元俊雅
2023-03-14

您始终可以通过附加<code>:

((x: Int) => x.toString): (Int => String)

例如,如果您有一个非常复杂的表达式,并且您不想依靠类型推断来直接获取类型,这将非常有用。

{
  if (foo(y)) x => Some(bar(x))
  else        x => None
}: (Int => Option[Bar])
// Without type ascription, need (x: Int)

但是,如果将结果赋给一个指定类型的临时变量,可能会更清楚:

val fn: Int => Option[Bar] = {
  if (foo(y)) x => Some(bar(x))
  else        _ => None
}
 类似资料:
  • 我使用React和Redux,并将动作类型指定为接口,这样我的还原程序就可以利用标记的联合类型来提高类型安全性。 我有如下类型声明: 我想创建创建这些动作的助手函数,我倾向于使用箭头函数。如果我这样写: 编译器无法提供任何帮助来确保这是一个有效的,因为没有明确指定返回类型。我可以通过执行以下操作显式指定返回类型: 但这需要指定我的函数参数两次,因此冗长且难以阅读。 在使用箭头符号时,有没有一种方法

  • 问题内容: 我试图使查询使用case语句,并且无法弄清楚如何获取case以返回列值而不是常量。我的查询工作正常,只是我为结果提供的列名被Cake引用或以其他方式处理不当,或者可能是PDO在某个无法深入了解的层中的某个地方。我和bindValue差不多,但是我遇到的任何文档都没有告诉我如何做到这一点。 我发现此示例注释: 但在所有这些情况下,提供的值都是一个常数。我需要传递一个字符串,该字符串是我要

  • 想象一下下面的代码: 如何定义myUdf的返回类型,以便查看代码的人立即知道它返回了一个Double?

  • 问题内容: 我正在尝试执行新的JDK 8函数式编程领域中似乎是相对基本的事情,但是我无法使其工作。我有这个工作代码: 它接受一个数字列表,并产生可以打印出来的功能列表。但是,显式强制转换为Callable似乎是多余的。在我和IntelliJ中看来。我们都同意这也应该起作用: 但是我得到一个错误: 问题答案: 您遇到了Java 8目标类型的限制,该限制适用于方法调用的 接收者 。尽管目标类型在大多数

  • 我正试图做一件在新JDK似乎是相对基本的事情 它获取一个数字列表并生成一个可以将它们打印出来的函数列表。然而,Callable的显式强制执行似乎是多余的。对我和IntelliJ来说似乎是这样。我们都同意这也应该有效: 但是,我收到一个错误: