方法返回类型的类型推断

2024-06-24

当存在显式方法时,为什么 Scala 无法推断方法的返回类型return方法中使用的语句?

例如,为什么下面的代码可以编译?

object Main {
    def who = 5
    def main(args: Array[String]) = println(who)
}

但以下则不然。

object Main {
    def who = return 5
    def main(args: Array[String]) = println(who)
}

方法的返回类型可以是定义它的块中最后一个语句的类型,也可以是定义它的表达式的类型(如果没有块)。

当你使用return在方法内部,您引入了该方法可能返回的另一个语句。这意味着 Scala 无法确定其类型return当它被发现时。相反,它必须继续进行,直到方法结束,然后组合所有退出点来推断它们的类型,然后返回到每个退出点并分配它们的类型。

这样做会增加编译器的复杂性并减慢编译器的速度,唯一的好处是在使用时不必指定返回类型return。另一方面,在本系统中,返回类型的推断无需依赖于 Scala 已经使用的有限类型推断。

因此,最终,在编译器复杂性和所获得的收益之间的平衡中,后者被认为不值得前者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

方法返回类型的类型推断 的相关文章

  • 当我在 scala 中使用全局映射变量而不广播时会发生什么

    在 scala 中 当我在 scala 中使用全局映射变量而不进行广播时会发生什么 例如 如果我使用变量collect 例如collectAsMap 看来它是一个全局变量 我可以在所有地方使用它RDD mapValues 函数无需显式广播它
  • Scala Vector 折叠语法(/: 和 :\ 和 /:\)

    有人可以提供一些例子来说明如何 and http www scala lang org archives downloads distrib files nightly docs library scala collection immut
  • K均值||用于 Spark 上的情感分析

    我正在尝试编写基于Spark的情感分析程序 为此 我使用了 word2vec 和 KMeans 聚类 从 word2Vec 我在 100 维空间中得到了 20k 个单词 向量集合 现在我正在尝试对这个向量空间进行聚类 当我使用默认并行实现运
  • scala的可变和不可变设置何时使用val和var

    我正在阅读 Scala Creator 编写的 Scala 编程 一书 我对 Set 的示例有点困惑 这是不可变集 var jetSet Set Boeing Airbus jetSet Lear println jetSet contai
  • 为什么 Vector[Option[Int]] 上的 flatMap 其映射器函数结果不是 Vector[Option[Int]] 有效?

    例如 Vector Some 1 Some 2 Some 3 None flatMap n gt n 产生一个Vector 1 2 3 而不是给出错误 正如我在其他语言中看到的那样 flatMap当你有一个产生嵌套的映射器函数时使用 所以我
  • 如何将枚举绑定到 playframework 表单?

    我有一个以下形式的枚举 object MatchFilterType extends Enumeration type MatchFilterType Value val gt Value gt val lt Value lt val eq
  • 如何将Spark DataFrame插入Hive内表?

    以追加模式将 DF 插入 Hive 内部表的正确方法是什么 看来我们可以使用 saveAsTable 方法直接将 DF 写入 Hive 或将 DF 存储到临时表然后使用查询 df write mode append saveAsTable
  • 错误:使用替代方法写入重载方法值:

    我正在尝试读取固定宽度的文件并将其写入文本文件 下面是代码 输入文件布局字段的长度 4 10 3 5 3 1 1 5 7 094482018 07 10 022 14012 000 0 30000A 002290 059412018 07
  • zip 样式 @repeat 嵌套形式

    repeat非常有用 然而 我遇到了嵌套表单的障碍 我需要制作一个比赛日程表 它有 2 个属性 日程数据 比赛日期 时间 地点 对手 和提交球队备注 例如 由于冬季风暴 1 月 7 日的比赛已移至1 月 9 日在 夏威夷 表单映射基于 ca
  • 在 Scala REPL 中访问包私有方法

    假设我有一个private stuff method Stuff something in org my stuff 我可以在 Scala REPL 中做些什么 以便我可以调用Stuff something没有得到错误error value
  • JavaFX 控制器如何访问其他服务?

    我将 JavaFX 2 与 Scala 一起使用 我有class Application extends javafx application Application它执行诸如读取应用程序配置等操作 然后它会启动主窗口 该主窗口需要连接到一
  • JavaScript 中 Scala View 的等效项

    在斯卡拉中 view允许防止创建全新的集合 例如在Scala中 视图 有什么作用 https stackoverflow com questions 6799648 in scala what does view do JavaScript
  • 使用新的反射API,如何找到类的主构造函数?

    您可以像这样获取类的所有构造函数 import scala reflect runtime universe val ctor typeOf SomeClass declaration nme CONSTRUCTOR asTerm alte
  • 使用 Scala 在 Apache Spark 中拆分字符串

    我有一个数据集 其中包含以下格式的行 制表符分隔 Title lt t gt Text 现在对于每个单词Text 我想创建一个 Word Title 一对 例如 ABC Hello World gives me Hello ABC Worl
  • 在 Spark 中访问数组列

    Spark DataFrame 包含类型为 Array Double 的列 当我尝试将其返回到 map 函数时 它会抛出 ClassCastException 异常 以下 Scala 代码生成异常 case class Dummy x Ar
  • Scala 中表达式和语句有什么区别

    我是 Scala 世界的新手 想知道表达式和语句之间有什么区别 以及为什么 if else 用于表达式 而不是语句 是否有办法在 if else 中使用语句 EDIT 正如 J rg W Mittag 在评论中指出的 这个答案实际上是错误的
  • 结构化流式自定义重复数据删除

    我有一个从 kafka 进入 dataFrame 的流数据 我想根据 Id 删除重复项并根据时间戳保留最新记录 样本数据是这样的 Id Name count timestamp 1 Vikas 20 2018 09 19T10 10 10
  • 在 Scala Spark 和 PySpark 之间传递 SparkSession

    我的要求是从现有的 PySpark 程序调用 Spark Scala 函数 将 PySpark 程序中创建的 SparkSession 传递给 Scala 函数的最佳方法是什么 我将 scala jar 传递给 Pyspark 如下所示 s
  • sbt:未经授权发布到公司 Nexus 存储库

    快速解决 所需的凭证需要连接所定义的确切领域 请参阅下面如何找到您定义的那个 但最肯定的是 Sonatype Nexus Repository Manager 像平常一样将其余详细信息添加到凭据中 c data user sbt crede
  • Scala 不可变 Map 速度慢

    当我创建地图时 我有一段代码 val map gtfLineArr 8 split map split collect case Array k v gt k v toMap 然后我使用这张地图来创建我的对象 case class MyOb

随机推荐