我有以下代码:
class Communication
def initialize
@messages = {:tx => [], :rx => []}
end
class Message
def initialize (direction, name)
if direction == "TX"
@messages[:tx] << name #@messages dictionary is attribute from Communication class
else
@messages[:rx] << name #@messages dictionary is attribute from Communication class
end
end
end
end
每次创建一个新的Message对象时,我都希望构造函数查看提供的方向,并将其插入Communication类的字典“ @messages”的正确键中。我不确定Message类如何将其构造函数中的@messages区分为自己的属性或上层类Communication的属性。我可以从Message构造函数将值插入@messages吗?还是我需要在Communication班级上做到这一点?
答案 0 :(得分:5)
我可以从
@messages
构造函数中将值插入Message
吗?
不。不要被嵌套愚弄。 Communication::Message
是其自己的独立类。创建实例时,您不获得Communication
实例作为奖励。
出于几乎所有实际目的,应将它们视为未嵌套使用。嵌套会影响恒定的查找路径,但仅此而已。
答案 1 :(得分:1)
您可能考虑的解决方案是将消息创建封装为Communication中的一种方法。
class Communication
def initialize
@messages = {:tx => [], :rx => []}
end
class Message
def initialize (direction, name)
# Initialize the message
end
end
def create_message(direction, name)
if direction == "TX"
@messages[:tx] << name #@messages dictionary is attribute from Communication class
else
@messages[:rx] << name #@messages dictionary is attribute from Communication class
end
return Message.new(direction, name)
end
end