gpt4 book ai didi

scala - Scala 中匹配 String 和 Int 的区别

转载 作者:行者123 更新时间:2023-12-02 05:53:59 26 4
gpt4 key购买 nike

考虑以下两段代码:

scala> def f1(x:Any) = x match { case i:String => i; case _ => null }
f1: (x: Any)String

scala> def f2(x:Any) = x match { case i:Int => i; case _ => null }
f2: (x: Any)Any

为什么f2的返回类型是Any,而f1的是String?我希望两者都返回 Anyf2 返回 Int

最佳答案

如果方法返回不同的类型,类型推断会选择最低的公共(public)父类(super class)型。

您的函数 f1 返回一个 Stringnull,其中常见的父类(super class)型是 String 因为 字符串 可以有值null。 String 是 AnyRef 的子类,AnyRef 可以有 null 值。

您的函数 f2 返回一个 Int(AnyVal 的子类)或 null,其常见父类(super class)型是 任何Int 不能为 null

参见 http://docs.scala-lang.org/tutorials/tour/unified-types.html Scala 的类层次结构。

另一个例子:

scala> def f3(b: Boolean) = if (b) 42
f: (b: Boolean)AnyVal

f3 返回

要么 42 是 b 要么是 true

() 如果 bfalse

所以它返回的类型是IntUnit。常见的父类(super class)型是 AnyVal

关于scala - Scala 中匹配 String 和 Int 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5138953/

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