这是好习惯吗?存储由常量访问的对象。有很多方法可以存储其他类要访问的对象以进行处理。使用常量代替作为存储指向集合的哈希对象的方法是我最近开始做的事情,除了* @@ 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
答案 0 :(得分:1)
我建议不要使用常量来存储更改的数据。使用常量不仅告诉解释器您的数据不会改变,它还告诉其他程序员读取您的代码。如果您需要随时间存储数据,请使用@@class_variable
,@instance_variable
或$global
代替。
这不是一个OOP约定,而是一个红宝石约定。