これは愚かな質問かもしれないが、私はパラメータのハッシュを受け入れるルビーメソッドを作成する方法を知らない。パラメータのハッシュを受け入れるrubyメソッドを作成する
login_success :msg => "Success!", :gotourl => user_url
パラメータのこの種を受け入れるメソッドのプロトタイプがどのようなものです:私はRailsの中で私はこのようなメソッドを使用したいのですが、どういう意味ですか?どのように私はそれらを読むのですか?
これは愚かな質問かもしれないが、私はパラメータのハッシュを受け入れるルビーメソッドを作成する方法を知らない。パラメータのハッシュを受け入れるrubyメソッドを作成する
login_success :msg => "Success!", :gotourl => user_url
パラメータのこの種を受け入れるメソッドのプロトタイプがどのようなものです:私はRailsの中で私はこのようなメソッドを使用したいのですが、どういう意味ですか?どのように私はそれらを読むのですか?
パラメタをハッシュ構文でRuby関数に渡すと、Rubyはそれをあなたの目標とみなします。したがって:覚えて
def login_success(hsh = {})
puts hsh[:msg]
end
重要なのは、あなただけのハッシュパラメータは、関数の最後のパラメータである場合は、ハッシュ文字{}を省略構文を行うことができるということです。あなたはアランがしたことをすることができ、それはうまくいくでしょう。また
def login_success(name, hsh)
puts "User #{name} logged in with #{hsh[:some_hash_key]}"
end
そして、あなたは
login_success "username", :time => Time.now, :some_hash_key => "some text"
でそれを呼び出すことができます。しかし、ハッシュは、最後のパラメータではない場合、あなたは{}でハッシュ要素を囲むように持っています。
1つの引数を使用します。 Rubyはハッシュに名前付きの値を変換します:
def login_success arg
# Your code here
end
login_success :msg => 'Success!', :gotourl => user_url
# => login_success({:msg => 'Success!', :gotourl => user_url})
あなたが本当にあなたの代わりに、デフォルトのルビーダックタイピングの、ハッシュを得ることを確認したい場合は、あなたがそれを制御する必要があるだろう。例えば、何かのように、:
def login_success arg
raise Exception.new('Argument not a Hash...') unless arg.is_a? Hash
# Your code here
end
キーワード引数の出現により、あなたが今のRuby 2.1では
def login_success(msg:"Default", gotourl:"http://example.com")
puts msg
redirect_to gotourl
end
を行うことができRuby 2.0にあなたが
def login_success(msg:, gotourl:)
puts msg
redirect_to gotourl
end
、デフォルト値を除外することができます呼び出されると、デフォルト値を持たないパラメータを省略すると、ArgumentError
また、Ruby 2.1のデフォルト値を省略して、必要なパラメータを作成することもできます。 'def login_success(msg :, gotourl:)'は、 'msg'と' gotourl'の両方のパラメータが指定されていない状態で 'login_success'を呼び出そうとするとエラーになります。 – Ajedi32
login_success(* params)のようなものを使用できませんか? – collimarco
a *(別名スプラット演算子)は、メソッドが任意の数のargを受け入れ、それらをparamsという配列に配置することを意味します。それを使うかどうかは、あなたが何をしているかによって決まります。あなたが指定した例では、ハッシュが理にかなっています。 – Allyn
それはあなたが何回も議論すると期待していると言います。 'foo(1、:b、 '3')'と似ています。また、その "= {}"の部分は必要ありません。これは正常に動作します:def login_success(hash)。上記のコードはデフォルトを空のハッシュとして設定しています。 –