为什么Scala在匿名类型之间没有明确的平等?

soc*_*soc 2 c# scala class equals anonymous-types

考虑以下代码:

val a = new { val x = 1; val y = 2 }
val b = new { val x = 1; val y = 2 }

a == b // false
Run Code Online (Sandbox Code Playgroud)

如果字段/方法/值相同,那么如果匿名类定义了一些会返回true的相等,那么这不是明智的吗?

我想这也可以减少Scala在某些用例中必须生成的类文件的数量.

(据我所知,如果匿名类型的C#在相同的顺序中具有相同的值,则它们使用相同的类,并且true当它们相互比较时返回.)

Phi*_*ter 11

因为在所有情况下都很难做正确的事情.

通常,在OO语言中,相等性仅在同一类的实例之间有意义.当您按照问题的方式使用匿名类时,实际上有两个不同的类看起来相同.

考虑(伪代码):

class Point {
    int x;
    int y;
}

class Dimensions {
    int x;
    int y;
}

class Rectangle {
    Point lowerLeftCorner;
    Dimensions dimensions;   
}
Run Code Online (Sandbox Code Playgroud)

这里的Point永远不应该与Dimensions相等,即使它们具有相同的x和y值.但是具有相同x和y值的两个点应该相等.

在您的示例中,如果您希望两个不同的匿名类具有相同的含义,那么该语言如何神奇地知道?它们在概念上可以是两个点,或点和维度.

(我不同意C#的系统更好:首先,它不知道你的匿名类是可以比较的;第二,我真的不明白为什么顺序应该影响事物.在所有其他情况下,顺序班级的字段无关紧要;为什么这里要重要?)