как лучше всего проверить условие и запустить метод в Ruby? какой из них самый читаемый?
бар, если фу
or
фу и бар
как лучше всего проверить условие и запустить метод в Ruby? какой из них самый читаемый?
бар, если фу
or
фу и бар
Я бы использовал один над другим в зависимости от ситуации.
Если я заинтересован в запуске метода в зависимости от выполненного условия (иначе условие не имеет побочного эффекта):
do_something if this_condition_is_true
Если я заинтересован в запуске метода только в том случае, если другой метод завершился успешно (он же оба метода имеют побочные эффекты):
do_something and do_something_other
&&
вместо and
. and
имеет более низкий приоритет, чем присваивание.
- person John Dvorak; 14.08.2014
&&
для условий (foo? && bar?
), но используйте and
для потока управления (do_this and do_that
).
- person spickermann; 14.08.2014
Изменить Как указал Смар, следующее может быть неверным для новейших версий Ruby. Проверяем прямо сейчас. Проблема продолжается здесь а>
spickermann дает хороший ответ, но его второй случай недостаточно ясен, поэтому я объясню его подробнее.
Обычно вы должны использовать if
, так как он предназначен для этой цели.
bar if foo
Но часто вы хотите определить локальную переменную на пути оценки условия. В этом случае вы не можете использовать постфиксную нотацию if
; следующее вызовет ошибку (при условии, что x
не определено ранее):
bar(x) if x = h[:foo]
и вы должны использовать and
, если хотите поместить его в одну строку.
x = h[:foo] and bar(x)
h = {} ; bar(x) if x = h[:foo]
на ирб.
- person Smar; 14.08.2014
bar
не вызывает ошибки.
- person sawa; 14.08.2014
bar()
не выдаст ошибку, пока не будет оценено; попробуйте вместо этого: h = { :foo => "nyaaan" } ; bar(x) if x = h[:foo]
. Если вы определили bar
, оно будет выполнено, и x
будет присвоено значение.
- person Smar; 14.08.2014
bar()
и ошибок быть не должно :)
- person Smar; 14.08.2014
bar()
, но выдает, если вы этого не делаете, поскольку он пытается оценить метод, который не существует. По крайней мере, это происходит со мной на irb
с ruby 2.1.1p76. Во всяком случае, синтаксических ошибок нет, просто ошибка об отсутствующем методе.
- person Smar; 14.08.2014
and
, когда хочу вернуть некоторые данные. z = x and y
. z
будет равно 'x' или y
что-то вроде z = x || y
.
- person ajahongir; 15.08.2014
foo && bar
? - person Darek Nędza   schedule 14.08.2014