Stenogramă pentru "return x dacă x" în Ruby

Un lucru pe care-l iubesc despre ruby este că poți exprima lucrurile în cel mai scurt mod posibil.

Știu că se poate face, când se atribuie

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

Există o formă analogică pentru return ?

# instead of
return x if x

Încerc să "spun" x o singură dată. Această întrebare solicită să se întoarcă (nimic), dar nu văd cum să o fac atunci când se întoarce altceva decât gol.

6
Ce este greșit la înlocuirea returnați x dacă x pur și simplu cu x ?
adăugat autor Zabba, sursa
@Zabba Nu este neapărat ultima afirmație
adăugat autor Jonathan Allard, sursa
Observare obsedată, @ Jorg; Am corectat-o ​​la "shorthand".
adăugat autor Jonathan Allard, sursa
Poate că abilitățile mele de matematică s-au deteriorat, dar nu este ceea ce aveți deja unul cu linie?
adăugat autor Jörg W Mittag, sursa

2 răspunsuri

Sunt aproape sigur că nu există nici o scurtă descriere pentru cel de-al doilea exemplu - și nici nu ar putea fi scrisă fără modificarea sintaxei ruby - deoarece nu este un idiom destul de comun. Ne pare rău, frate, dar se pare că va trebui să fii serios pe asta. (Desi, intr-adevar, in ceea ce priveste verbositatea, aceasta nu este chiar atat de rea.)

(De asemenea, notați că primul exemplu nu este corect: x || = a este echivalent cu x = x || a x = a cu excepția cazului x .)

4
adăugat
Ai dreptate, tocmai am corectat-o. Din moment ce sunteți "aproape sigur", am să aștept un pic și să recunosc acest lucru ca fiind răspunsul cu excepția cazului în care altcineva are unul. Deci, answer = a ta; answer || = new_answer , sau ar trebui să spun returnează new_answer dacă new_answer; a ta; ;)
adăugat autor Jonathan Allard, sursa

puteți să omiteți returnarea dacă este ultima instrucțiune într-un cod bloc.

exemplu

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
1
adăugat
Pot să omiteți return dacă este ultima mea afirmație, dar intenția mea a fost să spun c o singură dată. Și în cazul meu, vreau să acopăr și ultimele declarații!
adăugat autor Jonathan Allard, sursa