singleton.sf 619 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Singleton
  4. #
  5. class Singleton(name) {
  6. static instance;
  7. method new(name) {
  8. instance ||= Singleton.bless(Hash(name => name));
  9. }
  10. method new {
  11. Singleton.new(nil);
  12. }
  13. }
  14. var s1 = Singleton('foo');
  15. say s1.name; #=> 'foo'
  16. say s1.object_id; #=> '30424504'
  17. var s2 = Singleton();
  18. say s2.name; #=> 'foo'
  19. say s2.object_id; #=> '30424504'
  20. s2.name = 'bar'; # change name in s2
  21. say s1.name; #=> 'bar'
  22. assert_eq(s1.object_id, s2.object_id);
  23. assert_eq(s1.name, s2.name);