Ruby: Syntax for defining a constant inside a Struct

前端 未结 2 1381
暗喜
暗喜 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:31

    After a little digging I was able to figure this out. Here's a quote from a similar question:

    Constants belong to classes, therefore constant resolution via the :: operator only works with class objects.

    In your above example Inner is a constant not a class, so Outer::Inner::CONST won't work. If we redefine Inner as a class we see the expected results.

    class Outer
    
      class Inner
        CONST = 'abce'
        Deeper = Struct.new(:dummy) do
          def fun
            puts(dummy)
          end
        end
      end
    
    end
    
    obj = Outer::Inner::Deeper.new(15)
    obj.fun
    puts(Outer::Inner::CONST)
    

提交回复
热议问题