这是好习惯吗?存储由常量访问的对象...

时间:2012-04-06 15:30:52

标签: ruby

这是好习惯吗?存储由常量访问的对象。有很多方法可以存储其他类要访问的对象以进行处理。使用常量代替作为存储指向集合的哈希对象的方法是我最近开始做的事情,除了* @@ class_variables。如果有的话,那个专业人士会对此有什么看法?对OOP来说并不是什么新鲜事,但任何有关不良做法的见解都会受到赞赏。

  #!/usr/bin/env ruby 
  OUTSIDE_STATE = true

  NAMES = {:objects => []}

  module CheckSelf
    module ClassMethods
      def self.inherited(child)
        ::NAMES[:objects] << child
      end

      def select_and_make_calls
        _selected = NAMES[:objects].select {|child|
            child.purpose() 
          }.each {|child|
          # _child = child.new(child)
          child.new(child).call_out
        }
      end    
    end

    module InstanceMethods
      def call_out
        puts "FIRING OFF THE CALLS #{self.class}"
      end
    end

    def self.included(receiver)
      receiver.extend         ClassMethods
      receiver.send :include, InstanceMethods
    end
  end

  class Parent

    def initialize(name)
      @name = name
    end  

    include CheckSelf

    # The inherited class must be defined in the * 
    # Body of the class.
    def self.inherited(child)
      NAMES[:objects] << child
    end

  end

  class ObjectOne < Parent

  def self.purpose
      OUTSIDE_STATE
    end
  end

  class ObjectTwo < Parent
    def self.purpose
      true
    end

  end

  Parent.select_and_make_calls

1 个答案:

答案 0 :(得分:1)

我建议不要使用常量来存储更改的数据。使用常量不仅告诉解释器您的数据不会改变,它还告诉其他程序员读取您的代码。如果您需要随时间存储数据,请使用@@class_variable@instance_variable$global代替。

这不是一个OOP约定,而是一个红宝石约定。