32

誰かがオプションのハッシュについて説明してくれませんか? 私は testfirst.org の ruby​​ コースに取り組んでいます。演習 10 (temperature_object) では、オプション ハッシュの知識が必要です。

4

5 に答える 5

7

これらの答えはすべて正しいため、ruby 2 ではキーワード引数のサポートが改善されました。

デフォルトのハッシュ パラメータを としてメソッドを定義し*argsoptions = {}.

def foo(bar: 'initial')
  puts bar
end

foo # => 'initial'
foo(bar: 'final') # => 'final'

必要な引数: キーの後にコロンが必要です (Ruby 2.1 も必要です)。

def foo(bar:)
  puts bar
end

foo # => ArgumentError: missing keyword: bar
foo(bar: 'baz') # => 'baz'   

オプションの引数。デフォルトを次のように設定できますnil

def foo(bar: nil, baz: 'aaa')
  puts "#{bar}:#{baz}"
end

foo # => ':aaa'
foo(baz: 'zab') # => ':zab'
foo(bar: 'rab', baz: 'zab') # => 'rab:zab'
foo(bin: 'bin') # => ArgumentError: unknown keyword: bin

また、この新しいハッシュ パラメータ表記で標準の位置引数を使用することもできます。詳細については、このブログ公式ドキュメントを参照してください。

おまけ: メソッドの呼び出しを変更せずにオプション ハッシュを取り除くことができるため、リファクタリングは簡単です。しかし...これは完全に真実ではありません。予期しないオプションを使用して呼び出しを行うと、ArgumentError: unknown keyword: invalid_arg.

于 2015-08-30T01:51:05.007 に答える
4

逆マージは、Ruby/Rails でオプション ハッシュを実装するための最良の方法です。

def set_state_application(options_hash)
  options_hash.reverse_merge!(send_email: true, other_default_val: 'a') #will set defaults
  self.update_column(:status_id, VendorEnums::VendorStatus::APPLICATION)
  VendorMailer.email_application(self) if options_hash[:send_email]
  save_state
end
于 2014-03-20T01:40:00.297 に答える