2013-05-28 117 views
0

如何从块内更新实例变量?Ruby - 从块内更新实例变量

E.g.

def initialize_people(people) 
    people.each do |person| 
     person = "Bob" if person.nil? 
    end 
end 

@first = "Adam" 
@second = "Eve" 
@third = nil 

people = [@first, @second, @third] 
initialize_people(people)  
puts people 

# outputs 
# Adam 
# Eve 

# would like it to output 
# Adam 
# Eve 
# Bob 

回答

0

表达:

people.each |person| 

定义本地person到环路。所以,你所做的所有循环都是在personBob的范围内,当它被发现是nil。你可以做这样的事情:

def initialize_people(people) 
    people.each_with_index do |person, i| 
     people[i] = "Bob" if person.nil? 
    end 
end 

或更短:

i = people.find_index(nil) 
people[i] = "Bob" if i