2009-03-10 9 views
8

Znalazłem trzy sposoby, aby napisać tę samą sytuację w Ruby:Jak napisać „czy” bez użycia „a następnie” lub „koniec” w Ruby

#1 
if 1==1 
    puts "true" 
end 

#2 
puts "true" if 1==1 

#3 
if 1==1 then puts "true" end 

Dlaczego nie mogę to zrobić?

#4 
if 1==1 puts "true" 

nie rozumiem:

  1. Dlaczego następnie i koniec są potrzebne w # 3, a
  2. Dlaczego muszę zmienić aby otrzymać nr 2 do praca.

Oświadczenie # 4 wydaje się najbardziej naturalnym sposobem na napisanie tego. Nie rozumiem, dlaczego nie jest to możliwe.

Odpowiedz

19

Składnia "if x then y end" jest przeznaczona dla warunków warunkowych wieloliniowych, natomiast formularz "y if x" jest przeznaczony do zwięzłych jednoliniowych instrukcji warunkowych. then jest konieczne w pierwszym przypadku, aby powiedzieć Ruby, że warunek jest skończony (ponieważ Ruby nie wymaga parens jak C), a end jest konieczne, aby powiedzieć Ruby, że cały blok if jest skończony (ponieważ może to być wiele linii).

Możesz zastąpić then średnikiem, ponieważ koniec linii również sygnalizuje koniec warunku. Nie można pozbyć się urządzenia end za pomocą wieloliniowego urządzenia if. Użyj drugiego formularza lub operatora trójskładnikowego, jeśli chcesz uzyskać zwięzły tekst jednokomorowy.

Na przykład, załóżmy

x = true 

dodaje oceni prawdziwe, i powrócić y

x ? y : 
=> y 

podobnie, ten oceni fałszywe i powrócić nic

!x ? y : 
=> 

dodać termin po ":" w innym przypadku

!x ? y : z 
=> z 
+0

", ponieważ Ruby nie wymaga paren jak C" - zapomniałem o tym. Ok, ma sens, dlaczego "to" jest potrzebne. Nie wiedziałem o średniku - wygląda trochę dziwnie, ale działa. Bardzo pomocne. Dzięki. –

+0

+1 za średnik końcówki. –

4

Chodzi o to, że obie strony rzeczywiście są naturalnym sposobem myślenia:

jeśli to prawda to zrobić coś

coś zrobić, czy to prawda

See? Ruby próbuje w ten sposób zbliżyć się do angielskiej składni. Koniec koniec jest właśnie konieczne, aby zakończyć blok, podczas gdy w drugiej wersji, blok jest już zamknięty z , jeśli.

Aby właściwie odpowiedzieć na to pytanie, myślę, że nie ma szans, aby uzyskać następnie i koniec usunięte. Pamiętasz Pascal/Delphi? Masz również tam , a następnie. Jest to typowe tylko dla języków w stylu C, które go nie mają.

0

Co powiesz na używanie dwukropka zamiast w ten sposób? http://www.java2s.com/Code/Ruby/Statement/layoutanifstatementisbyreplacingthethenwithacolon.htm

Jeśli chcesz, możesz zrobić zwarcie na kilka sposobów.

Instrukcja warunkowa jest po prostu częścią składni Ruby, aby była bardziej angielska.

+0

Z tego, co warto, użycie dwukropka minęło od Rubiego 1.9 - to samo, co w przypadku testów w przypadku. Zobacz "Syn 10 rzeczy, o których warto pamiętać w Rubim 1.9" – Telemachus