注意:这是一个理论性的问题,我并不试图修复任何东西,也不试图为了实际目的达到任何效果
在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
}
}
x => x:SomeType
我自己不知道答案,因为我从来不需要它,但我的直觉是,这将起作用。在工作表中尝试证实了这一点。
编辑:上面有例子之前我就提供了这个答案。在具体的例子中确实不需要这样。但是在极少数需要的情况下,我展示的语法会起作用。
假设你有这个功能:
def mulF(a: Int, b: Int): Long = {
a.toLong * b
}
同样的函数可以写成lambda,并定义输入和输出类型:
val mulLambda: (Int, Int) => Long = (x: Int, y: Int) => { x.toLong * y }
您始终可以通过附加<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来说似乎是这样。我们都同意这也应该有效: 但是,我收到一个错误: