文字列とオプションのハッシュを取るメソッドがあります。オプションのハッシュはメソッド名をキーとして、ブール値/値を値として持っています。この方法は、何をすべきsendメソッド:引数を渡すタイミングを選択します。
some_method("foo", upcase: true, times: 5)
我々はFOOFOOFOOFOOFOO
を得る5により、複数の、その後、それを文字列を取り、オプションのハッシュに基づいて、文字列の特定のメソッドを実行し、この場合には、それは文字列UPCASEを作るべきです出力として。ここで
私が午前問題は、私はsend
メソッドを使用する場合、options
ハッシュからメソッドのいくつかは、引数(のような*
を必要とし、いくつかは)(のような「UPCASE」ではないんです。
です私がこれまで持っているもの。
def method(string, options = {})
options.each do |method_name, arg|
method_name = :* if method_name == :times
mod_string = mod_string.send(method_name, arg)
end
end
私は、引数の予想
間違った番号(0を予想、1を与えられた)としてエラーが発生します
(REPL):9:
「`UPCASEでだから、私の質問は次のとおりです。引数がある場合にのみ、引数を送信する方法はありますか?
私が思いついた唯一の事は、私はちょうど良い方法があるかどうかを確認したいブール値
options.each do |method_name, arg|
method_name = :* if method_name == :times
if arg == true
mod_string = mod_string.send(method_name)
elsif !(!!arg == arg)
mod_string = mod_string.send(method_name, arg)
end
end
をチェックするif
文を使用しています。
私はちょうど 'arg = [arg] .reject {| el | el == true || el == false} '、および' mod_string.send(method_name、arg) 'を返します。それは美しく働いた。ありがとう – davidhu2000