Feature #20428
closed
Ability to reference current class/module in lexical scope
Added by hibachrach (Hazel Bachrach) 7 months ago.
Updated 7 months ago.
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
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
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!
- Status changed from Open to Closed
Also available in: Atom
PDF
Like1
Like0Like0Like0