从ruby集合中提取自定义对象

时间:2017-03-30 15:08:53

标签: ruby chef

我有一个自定义对象,非常简单的jsut试图弄清楚红宝石的工作原理。

    class SomeObject
  def initialize(name)
    @myName = name
  end

  def sayHello
    puts 'Hello ' + @myName
  end
end

然后我使用chef运行搜索,并创建其中几个对象并将它们添加到集合中:collection = []然后collection << myObject其中myObject为myObject = SomeObject.new('someName')

我是他们试图迭代这个集合,获取对象并调用sayHello。

collection.each do |i|
  p "Something...."
  p i.name #fails
  #i.sayHello # fails

end

谁能告诉我哪里出错或者我怎么做到这一点?感谢。

编辑:如果我在屏幕上打印“我”

&lt;#:: SomeObject:0x00000005546a50 @ myName =“some-name”&gt;

所以我确定它正在创建并且在集合中,我不能解决问题:D

1 个答案:

答案 0 :(得分:3)

您的实例变量名为@myName而不是@name,此外您还需要允许使用attr_reader指令公开读取您的实例变量:

class SomeObject
  attr_reader :myName

  def initialize(name)
    @myName = name
  end

  def sayHello
    puts 'Hello ' + @myName
  end
end

collection = [ SomeObject.new('Hunter') ]
collection.each do |i|
  puts i.myName # output= Hunter
  i.sayHello()  # output= Hello Hunter
end