2017-01-24 2 views

ответ

1

Блок и второй аргумент используются для предоставления значений по умолчанию.

Например:

# 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" 

Причина выбора одной формы над другой зависит от типа значения по умолчанию. Если значение по умолчанию жестко запрограммировано (например, буквальная строка в приведенных выше примерах), тогда форма аргумента имеет смысл. С другой стороны, если значением по умолчанию является вычисленное значение (т. Е. Вызов метода), то лучше использовать блок.

поведение по умолчанию, значение fetch мимики Capistrano, что рубин встроенного Hash#fetch, которая описана здесь: http://ruby-doc.org/core-2.4.0/Hash.html#method-i-fetch

Смежные вопросы