2012-05-29 13 views
6

Jedną z rzeczy, które uwielbiam w Ruby, jest to, że możesz wyrażać rzeczy w najkrótszy możliwy sposób.Skrócona nazwa "return x if x" w Ruby

Wiem, że można zrobić, gdy przypisanie

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

Czy istnieje postaci analogowej do return?

# instead of 
return x if x 

Próbuję "powiedzieć" x tylko raz. This question pyta o to, że właśnie wróciłeś (nic), ale nie widzę, jak to zrobić, gdy zwracam coś innego niż nieważne.

+0

Co jest nie tak z zastępowaniem 'return x if x' po prostu' x'? – Zabba

+2

@Zabba To niekoniecznie ostatnie oświadczenie –

+3

Może moje umiejętności matematyczne uległy pogorszeniu, ale czy to nie jest już jedno-liniowy? –

Odpowiedz

4

Jestem prawie pewna, że ​​nie istnieje skrót dla drugiego przykładu, ani jeden mógłby być napisany bez modyfikowania składni-Ruby ponieważ nie jest to na tyle powszechne idiom. Przepraszam, bracie, ale wygląda na to, że będziesz musiał to powiedzieć. (Chociaż, tak naprawdę, o ile gadatliwość idzie, to nie jest tak źle.)

(Zauważ też, że pierwszym przykładem jest nie tak: x ||= a jest równoważna x = x || a, które mogą być również wyrażone jako x = a unless x.)

+1

Masz rację, właśnie to poprawiłem. Ponieważ jesteś "prawie pewny", poczekam trochę i przyznam, że jest to odpowiedź "chyba, że" ktoś inny ją posiada. Więc 'odpowiedz = twoje; odpowiedź || = new_answer', czy powinienem powiedzieć 'return new_answer if new_answer; twoje; ';) –

-1

można pominąć powrót, jeśli jest to ostatnia instrukcja w kodzie blokowym.

przykład

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

Na pewno pominę "return", jeśli jest to moje ostatnie zdanie, ale moim zamiarem było powiedzenie "c" tylko raz. A w moim przypadku chcę również uwzględnić nie ostatnie oświadczenia! –