Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #245 Print value of custom type

Print the value of object x having custom type T, for log or debug.

print(x);
#include <iostream>
std::cout << x;
import fmt;
fmt.Println(x)
print x
console.log(x);
import static java.lang.System.out;
out.println(x);
import static java.lang.System.identityHashCode;
import static java.lang.System.out;
record X<T>(T t) {
    @Override
    public String toString() {
        String s = t.getClass().getName();
        s = "%s<%s>".formatted(getClass().getName(), s);
        return "%s@%x".formatted(s, identityHashCode(this));
    }
}
X<?> x = new X<>(123);
out.println(x);
writeln(x.T);
use Object::Pad;
class Point {
    has $x :param = 0;
    has $y :param = 0;
    
    use overload '""' => sub { shift->_stringify() };   

    method _stringify () { "A point at ($x, $y)"  }
}
 
my $p = Point->new(x => 5, y => 10);

print $p; # prints: A point at (5, 10)
package Point { 
    my $_data = {};
    
    sub new { 
        my $class = shift;
        $_data = { @_ };
        bless $_data, $class;
    };

    use overload '""' => sub { shift->_stringify() };

    sub _stringify {
        my $self = shift;
        return sprintf 'A point at (%d, %d)', $self->{x}, $self->{y};
    }
}
 
my $p = Point->new(x => 5, y => 10);
print $p;
print(x)
puts x
println!("{:?}", x);
Debug.Print x

New implementation...
< >
花大喵