gpt4 book ai didi

scala - Scala可以比较不兼容对象的原因和/或好处是什么?

转载 作者:行者123 更新时间:2023-12-04 13:24:35 24 4
gpt4 key购买 nike

这使我感到困惑-我已经阅读了Scala根本存在的原因,并且常识对我很有吸引力,例如选择静态类型(因为错误更少)。但是,您可以比较(默认情况下,开箱即用)完全不同的,不相关的对象,并且可以编译并正常运行。对我来说,它只是乞求代码中的更多错误。
有人可以解释使用此功能的原因是什么?还是好处?
我知道Scala在比较方面是如何工作的。 我在问为什么这样有效。
我希望,如果要执行此操作,我将编写隐式转换或显式比较。这种方法对我来说是目前Scala的最佳方式-不,因此也是我的问题。
还有一件事-我不是在寻找如何使用Scala方式比较来获得一些奇特的效果,而是在寻找更严格的错误检查。 IOW:我不想按颜色比较Orange和Apple,我希望默认情况下禁止这种比较,除非用户明确表示可以比较这种类型。
例子

class Test
{
val s : String = "ala"
}

class Foo
{
val x : Int = 5
}

object Testbed
{
def main(args : Array[String])
{
val t = new Test
val f = new Foo
if (t==f)
println("match")
else
println("no")
}
}

最佳答案

好吧,简单的答案是==设计为与java.lang.Object.equals()兼容。由于任何类都可以覆盖equals(),因此Scala编译器无法确定两个对象之间的相等性检查结果,除非它在编译时知道对象的运行时类(即,静态类型必须是最终类,或者new调用必须编译器在进行相等性检查时对编译器可见),并且在此类或任何父类(super class)中equals()方法均不会被覆盖。

因此,在您的示例中,编译器确实可以推断tf的运行时类,并为相等性检查发出警告(尽管不是错误),但是在实践中,可以推断出运行时类的情况很少见。请注意,scalac已经针对基本类型和对象类型之间的某些相等比较发出了警告。

P.S.如果您想要更安全的平等性检查,请使用Scalaz中的Equal特性。

关于scala - Scala可以比较不兼容对象的原因和/或好处是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7331466/

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