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”——字典属于
通讯的实例,而不是类本身。而且每个实例都有自己的。如果您想要一个“全局”字典,您必须在类级别上定义它或使用单例类。