3

JSON データに基づいてメソッドを動的に呼び出す Ruby アプリケーションを開発しています。大まかに:

def items
  # do something
end

def createItem( name:, data:nil )
  # do something that requires a name keyword argument
end

def receive_json(json) # e.g. { "cmd":"createItem", "name":"jim" }
  hash = JSON.parse(json)
  cmd = hash.delete('cmd')
  if respond_to?(cmd)
    params = Hash[ hash.map{ |k,v| [k.to_sym, v } ]
    method(cmd).arity==0 ? send(cmd) : send(cmd,params)
  end
end

上に示したように、引数を取らないメソッドもあれば、キーワード引数を取るメソッドもあります。Ruby 2.1.0 (私が開発している場所) では、arity上記の両方の方法は0. ただし、send(cmd,params)常に、パラメーターを取らないメソッドに対してエラーが発生します。

send必要な場合はキーワード引数を正しく渡し、そうでない場合は省略するにはどうすればよいですか?

4

2 に答える 2