2012-05-29 4 views
6

Одна вещь, которую я люблю в Ruby, заключается в том, что вы можете выразить вещи как можно короче.Сокращение для «return x if x» в Ruby

Я знаю, что можно сделать, при назначении

x ||= a 
# instead of 
x = a unless x 
# which is 
x = x || a 

Есть ли аналог формы для return?

# instead of 
return x if x 

Я пытаюсь «сказать» x только один раз. This question спрашивает о возвращении (ничего), но я не вижу, как это сделать, возвращая что-то другое, кроме пустоты.

+0

Что не так с заменой 'return x if x' просто' x'? – Zabba

+2

@ Zabba Это не обязательно последнее высказывание –

+3

Возможно, мои математические навыки ухудшились, но разве это не то, что у вас уже есть однострочный? –

ответ

4

Я как раз уверен, что не существует стенографии для вашего второго примера, не мог быть написан один, не изменяя синтаксис, так как рубин это не достаточно распространенной идиомой. Извините, брат, но похоже, что вам придется быть подробным на этом. (Хотя, действительно, насколько многословие идет, это не так уж плохо.)

(Обратите также внимание, что первый пример не совсем прав: x ||= a эквивалентен x = x || a, что также может быть выраженный как x = a unless x.)

+1

Вы правы, я только что исправил это. Поскольку вы «почти наверняка», я немного подожду и признаю это как ответ «если» у кого-то еще есть. Итак, 'answer = yours; answer || = new_answer', или я должен сказать 'return new_answer, если new_answer; ваш; ';) –

-1

вы можете опустить возврат, если это последний оператор в блочном коде.

пример

irb(main):002:0> def b(c) 
irb(main):003:1> c if c 
irb(main):004:1> end 
=> nil 
irb(main):005:0> b(4) 
=> 4 
irb(main):006:0> b(nil) 
=> nil 
irb(main):007:0> b(true) 
=> true 
irb(main):008:0> b(false) # TADA!!! 
=> nil 
+0

Я могу с уверенностью опустить 'return', если это мое последнее утверждение, но я хотел сказать' c' только один раз. И в моем случае я тоже хочу осветить не последние заявления! –

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

  • Нет связанных вопросов^_^