0

ruby のオプションのパラメーターに関する問題に直面しています。これは私のコードです:

def foo options={:test => true}
    puts options[:test]
end

foo # => puts true
foo :lol => 42 # => puts nil

2 番目の呼び出しで nil が返される理由がわかりません。他のパラメーター set :test を nil に設定しているようです。

ありがとう。

4

1 に答える 1

1

これは、デフォルトのパラメーターの場合、ハッシュ パラメーターを渡すと完全に上書きされる (つまり、 が設定されるoptions = {:lol => 42}) ため、options[:test]キーが存在しなくなるために発生します。

特定のハッシュ キーにデフォルト値を設定するには、次を試してください。

def foo options={}
  options = {:test => true}.merge options
  puts options[:test]
end

この場合、特定のキーのデフォルト値を持つハッシュ ( {:test => true}) を別のハッシュ (引数に key=>values を含む) とマージします。キーが両方のハッシュ オブジェクトにある場合、関数に渡されたハッシュの値mergeが優先されます。

于 2012-08-25T04:26:16.850 に答える