gpt4 book ai didi

scala - 单元素列表具有相同的头部但不相等?

转载 作者:行者123 更新时间:2023-12-01 13:39:29 25 4
gpt4 key购买 nike

给定两个 List[A] 实例,在什么情况下以下情况可能为真?

list.head == otherList.head // returns true
list.size == 1 // returns true
list.size == otherList.size // returns true

但是

list == otherList // returns false

最佳答案

如果我可以作弊并使用我自己的 A 那么这就是一个例子:

scala> :pa
// Entering paste mode (ctrl-D to finish)

class MyClass(val v: Int)
{
def ==(that: MyClass): Boolean = true
}

// Exiting paste mode, now interpreting.

defined class MyClass

scala> val l1 = List(new MyClass(1))
l1: List[MyClass] = List(MyClass@36776c32)

scala> val l2 = List(new MyClass(2))
l2: List[MyClass] = List(MyClass@39c87b42)

scala> l1.head == l2.head
res4: Boolean = true

scala> l1.size == l2.size
res5: Boolean = true

scala> l1.size == 1
res6: Boolean = true

scala> l1 == l2
res7: Boolean = false

为此你甚至不需要可变值,这只是使用我自己的 == 方法的一个技巧。但这是故意恶意的,希望没有人会编写会这样做的代码。

编辑:

所有你需要做的是 a) trick/break == 就像我对 MyClass 所做的那样,或者正如@2rs2ts 指出的那样,trick/break the sameElements check (使用 !=):

def sameElements[B >: A](that: GenIterable[B]): Boolean = {
val these = this.iterator
val those = that.iterator
while (these.hasNext && those.hasNext)
if (these.next != those.next)
return false
!these.hasNext && !those.hasNext
}

关于scala - 单元素列表具有相同的头部但不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41471493/

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