获取对象的实例变量

时间:2012-10-05 17:00:39

标签: ruby instance-variables accessor

我有s个数组Tile,其实例变量为@type

class Tile
  Types = ["l", "w", "r"]
  def initialize(type)
    @type = type
  end
end
s = []
20.times { s << Tile.new(Tile::Types.sample)}

如何获取每个Tile的{​​{1}}?如何仅返回具有特定@type的对象?

2 个答案:

答案 0 :(得分:3)

如果您想获得包含每个类型属性的数组,首先需要为@type创建至少一个阅读器:

class Tile
  attr_reader :type
  Types = ["l", "w", "r"]
  def initialize(type)
    @type = type

  end
end

然后使用Array#map

type_attribute_array = s.map(&:type)
#or, in longer form
type_attribute_array = s.map{|t| t.type)

如果您想根据@type值过滤Tile对象,Array#select是您的朋友:

filtered_type_array = s.select{|t| t.type == 'some_value'}

以下是Array的文档:Ruby Array

答案 1 :(得分:0)

你可以覆盖你的Tile类中的to_s,从中返回类型,只需通过调用s

遍历数组<tile_object>.to_s来打印类型
class Tile
  Types = ["l", "w", "r"]
  def initialize(type)
     @type = type
  end

  def to_s
     @type
  end
end

s = []
20.times { s << Tile.new(Tile::Types.sample)}
s.each {|tile| puts tile.to_s}