2017-01-24 1 views

答えて

1

ブロックと第2引数の両方がデフォルト値を提供するために使用されます。例えば

# If :some_var is not set, then the default is used 

fetch(:some_var) { "default" } 
=> "default" 

fetch(:some_var, "default") 
=> "default" 

# Once :some_var is set, the defaults are ignored 

set(:some_var, "value") 

fetch(:some_var) { "default" } 
=> "value" 

fetch(:some_var, "default") 
=> "value" 

あなたは第二引数と同時にブロックの両方を指定することはありません。その場合、引数は無視され、ブロックが使用されます。

# Don't do this, it is confusing 
fetch(:another_var, "arg_default") { "block_default" } 
=> "block_default" 

別のフォームを選択する理由は、デフォルト値のタイプによって異なります。上記の例のリテラル文字列のように、デフォルト値がハードコードされている場合、引数の形式は意味があります。一方、デフォルト値が計算値(すなわち、メソッド呼び出し)である場合、ブロックを使用する方がよい。

そのRubyのビルトインHash#fetch、ここで説明されているのカピストラーノのfetch模倣の既定値の動作:http://ruby-doc.org/core-2.4.0/Hash.html#method-i-fetch

関連する問題