Add equality

This commit is contained in:
Gender Demon 2021-10-17 17:56:31 +01:00
parent e7f68a4647
commit d641fc23c0
1 changed files with 54 additions and 0 deletions

54
equality/main.pony Normal file
View File

@ -0,0 +1,54 @@
actor Main
new create(env: Env) =>
// identity equality: there is only one None
// so None `is` None
if None is None then
env.out.print("None is None")
end
let a = Foo("hi")
let b = Foo("hi")
// a and b are different objects
if a is b then
env.out.print("a is b")
else
env.out.print("a is not b")
end
let c = a
// c is a reference to the same object to which
// a is a reference
// I assume? I don't actually know how the memory
// management works lol
if a is c then
env.out.print("a is c")
else
env.out.print("a is not c")
end
// structural equality: see fun eq() below
if a == b then
env.out.print("a is equal to b")
end
if a == c then
env.out.print("a is equal to c")
end
class Foo
let field: String
new create(field': String) =>
field = field'
// the value returned by this function implements
// structural equality
fun eq(that: box->Foo): Bool =>
this.field == that.field
// Extra note about primitives: since all primitives have no fields and there
// is only one instance of each user-defined primitive, all primitives of a
// given type are equal by identity and structurally equal. (I'm not sure
// about builtin primitives.)