Feature #20428
closedAbility to reference current class/module in lexical scope
Description
Hello! As far as I know, there is no way to reference the current Class
or Module
one is inside of lexically in Ruby. Would it make sense to add a syntax/keyword for this?
module Foo
module Bar
def blah
puts "executing from #{magic_new_keyword}"
end
end
end
class Baz
include Foo::Bar
def blah
super
puts "executing from #{self.class.name}"
end
end
Baz.new.blah
What I'm hoping for is
executing from Foo::Bar
executing from Baz
Updated by ufuk (Ufuk Kayserilioglu) 7 months ago
I think you should be able to use Module.nesting.first
to get the closest lexical nesting to the executing code. There might be edge-cases where this doesn't work the way you might want it to work, but it definitely works for your example:
module Foo
module Bar
def blah
puts "executing from #{Module.nesting.first}"
end
end
end
class Baz
include Foo::Bar
def blah
super
puts "executing from #{self.class.name}"
end
end
Baz.new.blah
outputs
executing from Foo::Bar
executing from Baz
Updated by hibachrach (Hazel Bachrach) 7 months ago
ufuk (Ufuk Kayserilioglu) wrote in #note-1:
I think you should be able to use
Module.nesting.first
to get the closest lexical nesting to the executing code. There might be edge-cases where this doesn't work the way you might want it to work, but it definitely works for your example:module Foo module Bar def blah puts "executing from #{Module.nesting.first}" end end end class Baz include Foo::Bar def blah super puts "executing from #{self.class.name}" end end Baz.new.blah
outputs
executing from Foo::Bar executing from Baz
It absolutely does--apologies for using up your time informing me of an existing API! Thank you!
Updated by Eregon (Benoit Daloze) 7 months ago
- Status changed from Open to Closed