Hello,
I have just upgraded ruby on my debian unstable to ruby 1.8.0-1
(2003-10-05), and my program has crashed. Here is the stripped down
version of my code:
···
#!/usr/bin/ruby1.8
class Action < Proc
attr_accessor :name
def initialize
puts “Action#init”
@name='not defined’
super
end
end
class Actions
def initialize
@actions=Hash.new
end
#~ def register(name,action=nil)
def register(name,action=nil,&bl)
if action.nil? && block_given?
puts "Before Action.new"
action=Action.new(&bl)
#~ action=Action.new
puts "After Action.new"
end
puts action.inspect
action.name=name
@actions[name]=action
action
end
end
actions=Actions.new
actions.register(‘exit’) {puts “yes”}
This program now outputs the following:
fery@domesticus:~/work/tudomany/implementation$ ./gui_test.rb
Before Action.new
After Action.new
#Proc:0x40276854@./gui_test.rb:32
…/gui_test.rb:25:in register': undefined method
name=’ for
#Proc:0x40276854@./gui_test.rb:32 (NoMethodError)
from ./gui_test.rb:32
fery@domesticus:~/work/tudomany/implementation$
So, instead of Action, action is a Proc!
Note, if I remove the &bl from the Actions#register(), then this code do
not show this behavior, although, there is not so much sense using a
Proc-derived class without a proc… :-((
What is the problem?
Thanks:
Ferenc
PS: The previous ruby version was also 1.8.0 (I do not remember the
exact date).