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}"
,但没有运气。
答案 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
区块内,您必须为人员实例调用name
和location
个访问者,您无法访问本地变量(例如:{{ 1}})。这里是完整的代码:
@name
以下是它的工作原理:http://ideone.com/rMgpPd