mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Fix Class inherited hook ordering
In CRuby the inherited method is invoked before Class.new yields to the block. An "already initialized error" exception is also removed since the inherited method is now invoked before initialization and can set instance variables on a class.
This commit is contained in:
@@ -503,3 +503,39 @@ assert('module with extended callback') do
|
||||
assert_true BarBeingExtended.respond_to?(:answer)
|
||||
assert_equal 42, BarBeingExtended.answer
|
||||
end
|
||||
|
||||
assert("inherited hook runs before block body") do
|
||||
class A
|
||||
def self.values
|
||||
@values ||= []
|
||||
end
|
||||
|
||||
def self.inherited(mod)
|
||||
mod.values << 1
|
||||
end
|
||||
end
|
||||
|
||||
klass = Class.new(A) do
|
||||
self.values << 2
|
||||
end
|
||||
|
||||
assert_equal [1, 2], klass.values
|
||||
end
|
||||
|
||||
assert("inherited hook runs before class body") do
|
||||
class A
|
||||
def self.values
|
||||
@values ||= []
|
||||
end
|
||||
|
||||
def self.inherited(mod)
|
||||
mod.values << 1
|
||||
end
|
||||
end
|
||||
|
||||
class B < A
|
||||
self.values << 2
|
||||
end
|
||||
|
||||
assert_equal [1, 2], B.values
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user