From: Sean Russell Date: 2001-05-13T00:21:01+09:00 Subject: [ruby-talk:15038] Ruby Newbie questions Question 1 In the Thomas/Hunt Ruby book (is this the book that keeps getting referred to as the "axe" book? Why?) there is an example (pg 252) of the definition of "once" in Date. This definition uses the singleton mechanism: class Date class << self def once(*ids) # ... end end # ... end Why? Why isn't this written: class Date def once(*ids) # ... end # ... end Question 2 Why doesn't the following do what I'd expect it to, and how does one solve this type of problem? module Child @level = 0 attr :level, true end The only thing I can think of would be: module Observer def observer_init # It seems like this shouldn't be neccessary @observers = [] end def add_observer( o ) # ... end # def del, notify, each, <=> end I'm aware that the Observer pattern is already implemented in Ruby, and I'm not interested in a Delegation pattern solution; I'm specifically trying to solve the problem of needing instance variables defined and initialized from a Module. Question 3 My last question is regarding initialization of classes. In Java, subclass instatiations cause the initialization of base classes: class A { public A() { System.out.println("In A"); } } class B { public B() { System.out.println("In B"); } } public class test { public static void main(String[] x) { B b = new B(); } } generates: In A In B In Ruby: class A ; def initialize ; puts "In A" ; end ; end class B < A ; def initialize ; puts "In B" ; end ; end b = B.new generates: In B What is the rational behind this? Method overloading is fine, but in the (special) case of initialization, I thought it was generally accepted that initializing ancestors in order was a Good Thing. I expected Module::new to do something like: ancestors.each{ |class| class.initialize(*args) } I know this code wouldn't actually work, but it illustrates my point. Thanks! --- SER