gpt4 book ai didi

scala - 简单的Scala语法-尝试定义 "=="运算符-我缺少什么?

转载 作者:行者123 更新时间:2023-12-04 04:58:25 27 4
gpt4 key购买 nike

在REPL上进行一些试验时,我到了需要这样的地方:

scala>类A(x:Int){println(x); def ==(a:A): bool 值= {this.x == a.x; }}

只是带有“==”运算符的简单类。

为什么不起作用???

结果如下:

:10:错误:类型不匹配;
找一个
必填:?{val x:?}
请注意,隐式转换不明确,因为它们是模棱两可的:
两种方法[A](x:A)ArrowAssoc [A]类型的对象Predef中的any2ArrowAssoc方法
和方法any2Ensuring在类型[A](x:A)Ensuring [A]的对象Predef中
可能是从A到?{val x:?}的转换函数
A(x:Int)类{println(x); def ==(a:A): bool 值= {this.x == a.x; }}
^

这是Scala 2.8 RC1。

谢谢

最佳答案

您必须定义equals(other:Any):Boolean函数,然后Scala免费提供==,定义为

class Any{
final def == (that:Any):Boolean =
if (null eq this) {null eq that} else {this equals that}
}

有关如何编写 equals函数以使其真正等效的信息,请参见Scala编程的第28章(对象平等)。

而且,您传递给类的参数 x不会存储为字段。您需要将其更改为 class A(val x:Int) ...,然后它将具有一个访问器,您可以使用该访问器在 a.x运算符中访问 equals

关于scala - 简单的Scala语法-尝试定义 "=="运算符-我缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2679792/

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