如何在内部类中使用属​​性?

时间:2019-10-22 13:30:23

标签: 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 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班级上做到这一点?

2 个答案:

答案 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