-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Pointer equality for Slice
#14720
Comments
I think this example should be true instead of false? slice == Slice[1, 2, 3] # => false |
Doh 🤦 It should be |
IIUC this alone won't let you use |
Correct. Compare by identity is based on object id and falls back to |
With #14728 adding |
Same for |
Slice
implements the equality operator==
as structural equality, i.e. two instances are considered equal if they have equivalent content.Two instances are considered equal if they have the same values:
Slice[1, 2, 3] == Slice[1, 2, 3]
(or even just values expressing the same concept in different types:Slice[1.0, 2.0, 3.0] == Slice[1, 2, 3]
).There is no method for referential equality, i.e. if two instances pointing to the same memory.
Slice
is a struct type but it wraps a pointer, so it has semantics similar to a reference type.Referential equality would be similar to equality of the pointers, but checking
size
as well -Slice
is a pointer plus size.Usually this is implemented as
#same?
and I think this would work well forSlice
.Related to referential equality and the implementation of
same?
is also#object_id
. For exampleSet
is a struct type but behaves like a reference because it's a wrapper of an reference type. It implements both#same?
and#object_id
(which just delegate to the wrapped reference). This doesn't work forSlice
because the wrapped pointer is not the only defining characteristic. Size is relevant as well.So I don't think
#object_id
makes sense forSlice
because the pointer address is not unique. TwoSlice
instances can share the same pointer address, but with different sizes they would still be referentially unequal.The text was updated successfully, but these errors were encountered: