#!/usr/bin/ruby

#
## https://rosettacode.org/wiki/Singleton
#

class Singleton(name) {
    static instance;

    method new(name) {
        instance ||= Singleton.bless(Hash(name => name));
    }
    method new {
        Singleton.new(nil);
    }
}

var s1 = Singleton('foo');
say s1.name;                #=> 'foo'
say s1.object_id;           #=> '30424504'

var s2 = Singleton();
say s2.name;                #=> 'foo'
say s2.object_id;           #=> '30424504'

s2.name = 'bar';            # change name in s2
say s1.name;                #=> 'bar'

assert_eq(s1.object_id, s2.object_id);
assert_eq(s1.name, s2.name);