gpt4 book ai didi

scala - 在 scala 中剖析一个简单的函数声明

转载 作者:行者123 更新时间:2023-12-02 05:31:41 24 4
gpt4 key购买 nike

这个例子来自 Beginning Scala,但对我来说解释得不够好。

val f: Int => String = x => "Dude: "+x

我真的有两个问题:

1) 第一个示例是否与下面的代码相同:

val f = (x:Int) => "Dude: "+x

2) 如果可以,有人可以详细说明,并稍微剖析第一个示例。 String = x 部分让我失望。我不确定如何阅读声明

最佳答案

它们是一样的。您正在以两种不同的方式让 Scala 的类型推断为您工作。

val f: Int => String = x => "Dude: "+x = 符号之前的部分是您显式声明 f 类型的地方 Int => String(即你说 f 是一个接受 Int 类型输入并返回 String 的函数)在 = 的右侧,您正在为 f 赋值。该值(根据您的声明)必须是一个接受 Int 并返回 String 的函数。事实上,你是说 f 等于 x => "Dude: "+x。scala 编译器的类型推断在这里为您工作,因为它从您已将 f 声明为从 Int 到 String 的函数的事实中理解 x 必须是 Int。

val f = (x:Int) => "Dude: "+x 中,您让 Scala 的类型推断通过查看您分配的值来“猜测”f 的类型给它。这个值(在 = 的右侧)是一个函数,它接受一个 Int(因为你明确地说 x:Int)并返回一个 String(因为你将 x 添加到“Dude:”,这是一个字符串,所以 string + x 的结果本身必须是一个字符串)。

注意:如果您在 REPL 中尝试这两个版本,您会注意到在一种情况下您将 f 定义为 (Int) => String,在另一种情况下将 f 定义为 (Int) => java.lang.String它们(从 scala 2.8.1 开始)是同一件事:scala 的字符串定义(在 Predef.scala 中)只是 type String = java.lang.String。这可能是针对 .NET 框架的 scala 版本完成的(其中 String 可能是 .NET 的 System.String 的别名),以便您始终可以在 scala 程序中编写 String。

关于scala - 在 scala 中剖析一个简单的函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com