Project

General

Profile

Actions

Feature #20428

closed

Ability to reference current class/module in lexical scope

Added by hibachrach (Hazel Bachrach) 8 months ago. Updated 8 months ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:117517]

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) 8 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) 8 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!

Actions #3

Updated by Eregon (Benoit Daloze) 8 months ago

  • Status changed from Open to Closed
Actions

Also available in: Atom PDF

Like1
Like0Like0Like0