default arguments & define_method: JRuby ~ MRI mismatch
--------------------------------------------------------
Key: JRUBY-4657
URL: http://jira.codehaus.org/browse/JRUBY-4657
Project: JRuby
Issue Type: Bug
Components: Ruby 1.8.7, Ruby 1.9
Affects Versions: JRuby 1.4, JRuby 1.3, JRuby 1.5
Environment: Debian Sqeeze, Java 5, Java 6
Reporter: Gergely Nagy
Priority: Minor
1. Have a method in a class with default arguments,
2. subclass this,
3. overriding the method with 'define_method' with no block arguments.
Problem: calling 'super' won't propagate arguments to the superclass.
Workaround: add an (unused) block argument now the super method argument will
be passed correctly.
Tried this with JRuby 1.3, 1.4 and trunk, with both --1.8 and --1.9.
MRI 1.8.7 is fine with this (you don't have to declare unused block arguments
to get it working consistently).
{code:title=testie.rb|borderStyle=solid}
class A
def f(x = :default)
warn "#{self.class} super f(#{x})"
x
end
end
class B < A
define_method :f do |x|
super
end
end
class C < A
define_method :f do # no block arg
super
end
end
B.new.f(:override) #### -> :override
C.new.f(:override) #### -> :default (JRuby), :override (MRI)
{code}
Note: as Vladimir pointed out, MRI 1.9.x reports this as error (block arity
must match the invocation).
That's probably the more correct behaviour in general.
However, because of a difference on how 1.9 and 1.8 handles blocks arity, I
think JRuby should support both:
* in 1.8 mode it should return :override for both invocations.
* in 1.9 mode it should complain as MRI does.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email