0

我试图找出在Ruby. 问题是我使用了两种类型的参数:EventUser. 有时该方法需要一个User

postAccept.replaceVariables(sally)

有时它需要两个Users

deleteGuest.replaceVariables(sally, tom)

有时它需要一个Event和两个Users

addUserToEvent.replaceVariables(mEvent, tom, sally)

最后,有时它需要一个Event和一个User

addnonbookable.replaceVariables(event1, carl)

以下是我目前正在做的关于该方法的事情:

def replaceVariables(*event)

    if event.size <=2

        if event[0].include?('entryId')
            event1 = event[0]
            my = event[1]
        else
            my = event[0]
            their = event[1]
        end
    else
        event1 = event[0]
        my = event[1]   
        their = event[2]
    end
            ...

问题是,我无法找出区分 theuserevent. 在上面的示例中,我尝试确定对象是否具有特定的键或值,但我得到NoMethodError.

有人可以告诉我我做错了什么,或者告诉我一种让事情保持动态和灵活的方法吗?

4

2 回答 2

4
def replace_variables(*args)
  events = args.select{|a| a.is_a? Event}
  users = args.select{|a| a.is_a? User}
  #now you have 2 arrays and can manipulate them
  #...
end

Tin Man 建议在 1 行中执行:

def replace_variables(*args)
  events, users = args.group_by{ |p| p.class }.values_at(Event, User)
  #now you have 2 arrays and can manipulate them
  #...
end
于 2012-12-20T20:04:03.647 回答
1

检查第一个参数是否是事件。如果是,那么它是唯一的事件,其余都是用户,您可以将事件移出。否则,他们都是用户。

def replaceVariables(*users)
  event = nil
  if users.first.is_a? Event
    event = users.shift
  end
  # ...
end
于 2012-12-20T20:06:16.343 回答