The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Name

SPVM::EqualityChecker - Interface Type for Object Equality Checking Callback

Usage

  use EqualityChecker;
  use Point;
  
  my $equality_checker = (EqualityChecker)method : int ($object1 : object, $object2 : object) {
    my $point1 = (Point)$object1;
    my $point2 = (Point)$object2;
    
    if ($point1->x == $point2->x && $point1->y == $point2->y) {
      return 1;
    }
    else {
      return 0;
    }
  };
  
  my $point1 = Point->new(1, 2);
  my $point2 = Point->new(5, 6);
  
  my $is_equal = $equality_checker->($point1, $point2);

Description

EqualityChecker is the interface type for the object equality checking callback.

Interface Methods

required method : int ($object1 : object, $object2 : object)

The implementation must receive two objects and if they are equal, return 1. Otherwise, return 0.

Class Methods

default_equality_checker

static method default_equality_checker : EqualityChecker ();

Returns a default default equality checker.

The implementation of the default equality checker is

  method : int ($object1 : EqualityCheckable, $object2 : EqualityCheckable) {
    
    my $eq = 0;
    if ($object1 && $object2) {
      $eq = $object1->eq($object1, $object2);
    }
    elsif ($object1) {
      $eq = 0;
    }
    elsif ($object2) {
      $eq = 0;
    }
    else {
      $eq = 1;
    }
    
    return $eq;
  };

If $object1 and $object2 are defined, the check of equality is perfermed by EqualityCheckable#eq method in the class of $object1, and returns its return value.

If only $object1 is defined, returns 0.

If only $object2 is defined, returns 0.

If both $object1 and $object2 are not defined, returns 1.

Copyright & License

Copyright (c) 2023 Yuki Kimoto

MIT License