NAME

Venus::Kind::Value - Value Base Class

ABSTRACT

Value Base Class for Perl 5

SYNOPSIS

package Example;

use Venus::Class;

base 'Venus::Kind::Value';

sub test {
  $_[0]->get + 1
}

package main;

my $example = Example->new(1);

# $example->defined;

DESCRIPTION

This package provides identity and methods common across all Venus value classes.

INHERITS

This package inherits behaviors from:

Venus::Kind

INTEGRATES

This package integrates behaviors from:

Venus::Role::Accessible

Venus::Role::Buildable

Venus::Role::Explainable

Venus::Role::Pluggable

Venus::Role::Proxyable

Venus::Role::Valuable

METHODS

This package provides the following methods:

cast

cast(Str $kind) (Object | Undef)

The cast method converts "value" objects between different "value" object types, based on the name of the type provided. This method will return undef if the invocant is not a Venus::Kind::Value.

Since 0.08

cast example 1
package main;

my $example = Example->new;

my $cast = $example->cast;

# bless({value => undef}, "Venus::Undef")
cast example 2
package main;

my $example = Example->new(
  value => 123.45,
);

my $cast = $example->cast('array');

# bless({value => [123.45]}, "Venus::Array")
cast example 3
package main;

my $example = Example->new(
  value => 123.45,
);

my $cast = $example->cast('hash');

# bless({value => {'123.45' => 123.45}, "Venus::Hash")

defined

defined() (Int)

The defined method returns truthy or falsy if the underlying value is "defined".

Since 0.01

defined example 1
package main;

my $example = Example->new;

my $defined = $example->defined;

# 0
defined example 2
package main;

my $example = Example->new(time);

my $defined = $example->defined;

# 1

explain

explain() (Any)

The explain method returns the value set and is used in stringification operations.

Since 0.01

explain example 1
package main;

my $example = Example->new('hello, there');

my $explain = $example->explain;

# "hello, there"

mutate

mutate(Str | CodeRef $code, Any @args) (Object)

The mutate method dispatches the method call or executes the callback and returns the result, which if is of the same type as the invocant's underlying data type will update the object's internal state or will throw an exception.

Since 1.23

mutate example 1
# given: synopsis

package main;

$example->mutate('test');

$example;

# bless({value => 2}, "Example")