Create module variables in Ruby

前端 未结 4 605
闹比i
闹比i 2020-12-07 13:33

Is there any way to create a variable in a module in Ruby that would behave similar to a class variable? What I mean by this is that it would be able to be accessed without

相关标签:
4条回答
  • 2020-12-07 14:22

    you can set a class instance variable in the module.

    module MyModule
       class << self; attr_accessor :var; end
    end
    
    MyModule.var = 'this is saved at @var'
    
    MyModule.var    
    => "this is saved at @var"
    
    0 讨论(0)
  • 2020-12-07 14:27

    You can also initialize value within module definition:

    module MyModule
      class << self
        attr_accessor :my_variable
      end
      self.my_variable = 2 + 2
    end
    
    p MyModule.my_variable
    
    0 讨论(0)
  • 2020-12-07 14:31

    If you do not need to call it from within an instance, you can simply use an instance variable within the module body.

    module SomeModule
      module_function
      def param; @param end
      def param= v; @param = v end
    end
    
    SomeModule.param
    # => nil
    SomeModule.param = 1
    SomeModule.param
    # => 1
    

    The instance variable @param will then belong to the module SomeModule, which is an instance of the Module class.

    0 讨论(0)
  • 2020-12-07 14:32

    Ruby natively supports class variables in modules, so you can use class variables directly, and not some proxy or pseudo-class-variables:

    module Site
      @@name = "StackOverflow"
    
      def self.setName(value)
        @@name = value
      end
    
      def self.name
        @@name
      end
    end
    
    Site.name            # => "StackOverflow"
    Site.setName("Test")
    Site.name            # => "Test"
    
    0 讨论(0)
提交回复
热议问题