0

で複数のパラメータを使用する最良の方法を見つけようとしていますRuby。問題は、2 種類のパラメーターを使用していることです:EventUser. メソッドに 1 つ必要な場合がありますUser

postAccept.replaceVariables(sally)

場合によっては2つ必要Usersです:

deleteGuest.replaceVariables(sally, tom)

場合によっては、Event1 つと 2 つが必要になりますUsers

addUserToEvent.replaceVariables(mEvent, tom, sally)

最後に、場合によっては 1 対 1 が必要になり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
            ...

user問題は、とを区別する方法がわからないことeventです。上記の例では、オブジェクトに特定のキーまたは値があるかどうかを判断しようとしましたが、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 に答える