誰かがオプションのハッシュについて説明してくれませんか? 私は testfirst.org の ruby コースに取り組んでいます。演習 10 (temperature_object) では、オプション ハッシュの知識が必要です。
質問する
44764 次
5 に答える
7
これらの答えはすべて正しいため、ruby 2 ではキーワード引数のサポートが改善されました。
デフォルトのハッシュ パラメータを としてメソッドを定義し*args
、options = {}
.
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 に答える