Ruby: Syntax for defining a constant inside a Struct

前端 未结 2 1356
暗喜
暗喜 2021-01-13 05:45

Consider the following (correct) Ruby program:

class Outer

  Inner = Struct.new(:dummy) do
    CONST = \'abce\'
    def fun
      puts(dummy)
    end
  end
         


        
2条回答
  •  暖寄归人
    2021-01-13 06:32

    This happens because the constant is defined in the current namespace. The class and module keywords define namespaces, but Struct.new (just like Class.new) does not.

    In order to define the constant under the Struct's scope, you have to use self::

    class Outer
      Inner = Struct.new(:dummy) do
        self::CONST = 'abce'
      end
    end
    
    Outer::Inner::CONST
    #=> 'abce'
    
    Outer::CONST
    #=> NameError uninitialized constant Outer::CONST
    

提交回复
热议问题