私はルビーに新しいですので、私が最初に私の問題の状況を説明してみましょう: 私は、次のキー/値のペアを持っている入力としてJSONを持っている:polymorphismを使用して文字列を比較するswitch文を削除するにはどうすればよいですか?
{
"service": "update"
}
値は、例えば、多くの異なる値を持っています:など 次異なる要求を処理するメソッドのxがあり、削除、挿入します。私はまだ "のことを思い出す(文字列値をチェックするために、switchステートメントを使用する必要があるということです何悩ませている
def x(input)
case input[:service]
services = GenericService.new
when "update"
result = services.service(UpdateService.new,input)
when "insert"
result = services.service(InsertService.new,input)
when "delete"
result = services.service(DeleteService.new,input)
....
....
else
raise "Unknown service"
end
puts JSON.pretty_generate(result)
end
'ugh ..のインスタンス)。よりクリーンな方法(スイッチを使用する必要はありません)はありますか?
最後に私は質問に答えて検索しようとしましたが、私がそれを逃した場合は、関連する質問にコメントすることはできませんでした。
アップデート:私は多分に考えていたが、次のように関連するクラス名に文字列をキャスト:How do I create a class instance from a string name in ruby?と、結果= services.services(x.constantize.new、入力)を呼び出し、その後、クラス名はofcourseのに必要jsonの入力と一致します。
のGenericServiceは、今怠慢になりません、insertなど –
Kernal.const_getを特定のモジュールYに制限するにはどうすればよいですか? –
Nevermindはそれを持っています:) Object.const_get(module_name).const_get(class_name).new –