Я думал, что:Положения «если» условие
do_something if condition
были эквивалентны
if condition
do_something
end
Я нашел код, который не уважает это правило.
if !(defined? foo)
foo = default_value
end
Здесь foo
принимает default_value
.
foo = default_value if !(defined? foo)
Здесь foo
принимает nil
. В первом коде, я думаю, if
выполняется первым, и должен быть эквивалентен:
foo = (default_value if !(defined? foo))
Есть ли способ задать default_value
, если переменная не определена?
Общий ответ:
Некоторые несколько замечаний хотят использовать ||=
оператор ... Который не будет работать, если foo
является nil
:
foo ||= default_value
будет возвращать значение по умолчанию, в то время как foo
является определены.
Я настаиваю на использовании «не defined?
», который не равен nil
.
это опечатка? -> if (определено? foo) # в третьем блоке кода, вызывают в четвертом его -> if! (defined? foo) – ajt
@ajt. Вы правы. Я забыл «!» ... – pierallard
Idiomatic Ruby будет использовать '|| =', вы против этого? –