9

名前付き引数を取るルビーのメソッドがある場合...

def smoosh(first: nil, second: nil)
    first + second
end

キーが一致する場合にそのメソッドにハッシュを渡す最も簡単な方法は次のとおりです。

params = { first: 'peanut', second: 'butter' }

smoosh(params)

上記は引数エラーを生成します。

アップデート:

これは、Sinatra パラメータの動作に問題があるようです。

私がする時:

get 'a_sinatra_route' do
  hash = params.clone
  hash.symbolize_keys!

  smoosh(hash)
end

それは正常に動作します。パラメータを単独で渡すだけでは機能しません。(シンボルキーで個々のパラメータにアクセスできますがparams[:attr]

4

3 に答える 3

14

私にとってはうまくいくようです。

2.0.0p0 :007 > def smoosh(first: nil, second: nil)
2.0.0p0 :008?>   first + second
2.0.0p0 :009?> end
 => nil
2.0.0p0 :010 > params = { first: 'peanut', second: 'butter' }
 => {:first=>"peanut", :second=>"butter"}
2.0.0p0 :012 > smoosh(params)
 => "peanutbutter"
于 2013-05-03T22:53:42.960 に答える
-7

2 つの引数を取るメソッドに1 つのハッシュを渡しているため、ArgumentError がスローされます。ハッシュには 2 つのキーと値のペアがありますが、それでも引数は 1 つです。

この状況では、次のことを試すことができます。

smoosh(params[:first], params[:second])

値を渡す。

于 2013-05-03T22:50:14.027 に答える