èªåã®ã¯ã©ã¹ã®æ°ããã¤ã³ã¹ã¿ã³ã¹ãä½ãæ¹æ³
ããªã¼ã®ãããªãã¼ã¿æ§é ãä½ã£ã¦ããã¨ï¼èªåã®ã¯ã©ã¹ã®æ°ããã¤ã³ã¹ã¿ã³ã¹ãä½ããããªãå ´åãããã¾ãï¼ç§ã¯æåï¼ä»¥ä¸ã®ãããªã³ã¼ããæ¸ãã¦ãã¾ããï¼
#!/usr/bin/ruby require 'pp' class TestClass attr_accessor :serial, :obj @@serial = 'id0000' def initialize self.serial = @@serial.succ!.dup self end def duplicate return TestClass.new end end s0 = TestClass.new s0.obj = 'Hello' s1 = s0.duplicate s1.obj = 'World' pp [[s0.serial, s0.obj], [s1.serial, s1.obj]]
å®è¡ä¾:
% ./selfclass-0.rb [["id0001", "Hello"], ["id0002", "World"]]
duplicateã¡ã½ããã§"TestClass.new"ã®ããã«ï¼èªåã®ã¯ã©ã¹åãç´ã«æ¸ãã¦ããã®ãã ããã§ãï¼ã©ãã«ããªããªããï¼ã¨ï¼Rubyã®ããã¥ã¢ã«ã§Objectã¯ã©ã¹ã®ã¡ã½ãããçºãã¦ããã¨ããï¼"Object#class"ã¨ããã¡ã½ãããçºè¦ãã¾ããï¼ããã使ãã¨ï¼ä»¥ä¸ã®ããã«ãã£ããæ¸ããã¨ãã§ãã¾ãï¼
#!/usr/bin/ruby require 'pp' class TestClass attr_accessor :serial, :obj @@serial = 'id0000' def initialize self.serial = @@serial.succ!.dup self end def duplicate return self.class.new end end s0 = TestClass.new s0.obj = 'Hello' s1 = s0.duplicate s1.obj = 'World' pp [[s0.serial, s0.obj], [s1.serial, s1.obj]]
å®è¡ä¾:
% ./selfclass-1.rb [["id0001", "Hello"], ["id0002", "World"]]
Objectã¯ã©ã¹ã¯å®ã®å±±ã§ããï¼
ã¾ãï¼èªåã®ã¯ã©ã¹ã®ã¹ã¼ãã¯ã©ã¹ã¯self.class.superclassã§åç
§ãããã¨ãã§ããããã§ãï¼ã¹ã¼ãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãä½æããå ´åã¯ï¼self.class.superclass.newã¨ããæãã§ããããï¼