Ruby 如何在内部类中使用属性?
我有以下代码:Ruby 如何在内部类中使用属性?,ruby,Ruby,我有以下代码: class Communication def initialize @messages = {:tx => [], :rx => []} end class Message def initialize (direction, name) if direction == "TX" @messages[:tx] << name #@messages dictionary is attribute f
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
类通信
def初始化
@消息={:tx=>[],:rx=>[]}
结束
类消息
def初始化(方向、名称)
如果方向==“TX”
@信息[:tx]
我能否从Message
构造函数将值插入@messages
没有。不要被筑巢所愚弄<代码>通信::Message
是它自己的独立类。当您创建一个实例时,您不会得到一个通信实例作为奖励
对于几乎所有的实际用途,将它们视为没有嵌套。嵌套会影响常数查找路径,但这是相当重要的。一个您可以考虑的解决方案是将消息创建封装为通信中的一种方法。
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
类通信
def初始化
@消息={:tx=>[],:rx=>[]}
结束
类消息
def初始化(方向、名称)
#初始化消息
结束
结束
def create_消息(方向、名称)
如果方向==“TX”
@messages[:tx]@krmckone将Message作为内部类是否正确仍然有意义?如果没有通信对象,就不可能创建消息对象。@mareiou-Right,我只是在原始代码段中没有它。它现在回来了。@mareiou:没有嵌套类。Ruby没有嵌套类。通讯类的“dictionary”@messages”——字典属于通讯的实例,而不是类本身。而且每个实例都有自己的。如果您想要一个“全局”字典,您必须在类级别上定义它或使用单例类。