在ruby中搜索数组并将结果作为对象集合返回?

时间:2015-11-22 05:10:54

标签: arrays ruby search

我是红宝石的菜鸟,所以带上一粒盐。

我有一个Person我在下面发布了。我应该使用姓氏搜索people数组,并将结果返回到数组中,以便我可以使用诸如puts Person.search("Smith")

之类的put语句进行打印

这是我正在上课的课程:

class Person

  attr_accessor :first_name,:last_name
  @@people = []

  def initialize(x,y)#should take 2 parameters for first_name and last_name
    @first_name = x
    @last_name = y  
    @@people << "#{@x} #{@y}"
  end
#my problem is that the function is returning nill. 
  def self.search(last_name)
  @results = []
  @@people.each do |variable|
      if variable.include? last_name 
              @results << variable
      end
    end
      @results
  end

  def to_s
    puts "#{@first_name} #{@last_name}"
    #return a formatted string as `first_name(space)last_name`
  end
end

p1 = Person.new("John", "Smith")
p2 = Person.new("John", "Doe")
p3 = Person.new("Jane", "Smith")
p4 = Person.new("Cool", "Dude")

我将results声明为块外的空数组,因此我可以更改其值并在块内添加项目,并将更改保持在块的范围之外。但由于某种原因,该功能似乎不起作用。如何调试功能,以便查明问题?

1 个答案:

答案 0 :(得分:0)

您的代码中存在错误。你需要使用

Users.updateAuth().then(function(auth) {
  // do something with auth
  return Interests.syncAll();
}).then(function(interests) {
  // do something with interests
  return Events.syncAll();
}).then(
  function success(events) {
    // do something with events
    $rootScope.syncing = false;
  },
  function failure(error) {
    $rootScope.syncing = false;
    $scope.syncError = true;
  }
);

@@people << "#{x} #{y}" x是局部变量,您不应将y作为@的前缀@x,而@y仅适用于实例变量