我有一个基类A
,其中包含一个公共方法,它与A的后代提供的数组一起工作。数组是:
A
如何处理如此定义的问题的对象设计?我仍然不确定自己在哪里存储该数组,无论是在常量,实例变量还是实例方法中。请告诉我如何做到这一点。
答案 0 :(得分:0)
上次我对一个女新手很邪恶。这一次,我会尽力做好。
方式一,使用常数:
A = Class.new
class B < A
FOO = [ :hello, :world ] # this is your array
end
# Access different constants defined in different descendants is tricky, like this:
class A
def foo_user
puts self.class.const_get :FOO
end
end
B.new.foo_user #=> [ :hello, :world ]
# Note theat you can't do this:
class A
def foo_user
puts FOO # this would look for FOO in A mother class only
end
end
B.new.foo_user #=> error
方式二,使用属于A:
的子类的实例变量A = Class.new
class B < A
@foo = [ "hello", "world" ]
end
# This way is more usable. I would go about it like this:
class A
class << self
attr_reader :foo # defining a reader class method
end
def foo
self.class.foo # delegating foo calls on the instances to the class
end
def foo_user
puts foo
end
end
B.new.foo_user #=> [ :hello, :world ]
第三种方法,使用后代定义的实例方法:
A = Class.new
class B < A
def foo
[ "hello", "world" ]
end
end
# This way is also usable.
class A
def foo_user
puts foo
end
end
方式2(属于后代类的实例变量)和3(后代类定义的方法)之间的选择取决于值(数组)需要的灵活性。方式2最灵活,但方式3占用的代码更少。