迭代数组并显示实例变量

时间:2014-11-21 19:43:34

标签: ruby arrays

class Person
  attr_reader = :name, :location
  def initialize(name, location)
    @name = name
    @location = location 
  end
end

persons_array = [Person.new("Shon", "Texas"), Person.new("Michael", "California"), Person.new("Chris, "california") ]

我正在尝试遍历上面的数组并显示"Shon is in Texas." 我试过了persons_array.each { puts "#{@name} is in "#{location}",但没有运气。

2 个答案:

答案 0 :(得分:1)

您有一些语法错误。

它应该是attr_reader :name而不是attr_reader = :name。事实上,attr_reader是一个接受任意数量参数的方法,你可以像这样调用它:attr_reader(:name, :location)它仍然可以工作。

您可以在此处查看|variable|在Ruby块中的工作原理:What are those pipe symbols for in Ruby?

class Person
  attr_reader :name, :location
  def initialize(name, location)
    @name = name
    @location = location 
  end
end

persons_array = [Person.new("Shon", "Texas"), Person.new("Michael", "California")]
persons_array.each do |person|
  puts "#{person.name} is in #{person.location}"
end

将打印

Shon is in Texas
Michael is in California

答案 1 :(得分:1)

您的代码有三个问题:

  • attr_reader行不应该有等号
  • 在最后一行,在传递给each的块中,您必须在管道符号之间声明person变量(|
  • each区块内,您必须为人员实例调用namelocation个访问者,您无法访问本地变量(例如:{{ 1}})。

这里是完整的代码:

@name

以下是它的工作原理:http://ideone.com/rMgpPd