From: Scott Date: 2006-08-11T00:05:08+09:00 Subject: Adding MonitorMixin causes compile failure when initialize takes a parameter Hi, I am a relative newbie in Ruby and I need to do some simple thread based programs. In the new pickaxe book I saw this code for enabling a synchronized block using a MonitorMixin require 'monitor' class Counter include MonitorMixin attr_reader :count def initialize @count = 0 super end def tick synchronize do @count += 1 end puts @count end end c = Counter.new t1 = Thread.new{10000.times {c.tick} } t2 = Thread.new{10000.times {c.tick} } t1.join; t2.join This works fine, except that in my application the class takes a parameter, so I added a parameter to the new call and a parameter to the initialize method as below, require 'monitor' class Counter include MonitorMixin attr_reader :count def initialize(init_param) @count = init_param super end def tick synchronize do @count += 1 end puts @count end end c = Counter.new(2) t1 = Thread.new{10000.times {c.tick} } t2 = Thread.new{10000.times {c.tick} } t1.join; t2.join And when I do it fails to compile with the following error. `initialize': wrong number of arguments (1 for 0) (ArgumentError) What am I doing wrong? Thanks for you r help with this Scott