2010-09-14 16 views
5

Dlaczego nie można użyć nawiasów klamrowych w konstrukcjach if/else? Opuściłem Pythona, ponieważ nie czułam się dobrze z wcięciem zdań ostrożnie.Czy mogę użyć nawiasów klamrowych w Ruby, jeśli/else?

Czy tak samo jest w Ruby?

Na przykład, czy mogę napisać coś takiego?

if token == "hello" { 
    puts "hello encountered" 
    # lots of lines here 
} 

Czy jest jakiś sposób użycia nawiasów klamrowych, aby to zrobić? Czytałem także o blokach, ale nie wiem, w jaki sposób można je stosować w wyrażeniach if/else.

+1

jeśli masz trudności z formatowaniem możesz spróbować użyć IDE, które mogą AutoFormat dla ciebie tak ty widzę, jak rzeczy powinny wyglądać zaczynając – dave

+1

@drzeba się jeszcze raz na to patrzeć .. z myślą o akceptacji :) – Jeet

+8

Myślę, że popełniacie błąd tutaj. Nie możesz zgiąć składni języka do swoich oczekiwań (przynajmniej nie w Rubim). Zamiast tego będziesz musiał zgiąć swoje oczekiwania do składni języka. To tylko część nauki nowego języka. A jeśli nie czujesz się komfortowo wciskając swój kod, użyj lepszego IDE lub edytora. Jest to coś, co i tak musisz robić, więc nie powinno to być problemem. – AboutRuby

Odpowiedz

4

Nie. Musisz użyć end zamiast }.

14

Nie można używać nawiasów klamrowych, ale wcięcie również nie ma znaczenia. Zamiast klamry zamykającej Ruby używa słowa kluczowego end.

Mimo wszystko zalecałbym ostrożne wcięcie - źle napisany kod oszuka czytelników, nawet jeśli aparaty ortodontyczne będą używane prawidłowo.

+0

ale robi się brudny dla dużych konstrukcji .. – Jeet

+0

+1 za podkreślenie znaczenia właściwego wcięcia nad aparatami ortodontycznymi. Raedability jest królem. –

+0

@iAdam: Przepraszam - co jest nieładne dla dużych konstrukcji? – Chuck

12

To jest słodkie:

def my_if(condition, &block) 
    block.call if condition 
end 

Zastosowanie następująco:

my_if(token == "hello") { 
    puts "hello encountered!" 
} 
+0

Aby jeszcze więcej zabawy, zdefiniuj 'if' na' TrueClass' i 'FalseClass' jak Smalltalk. – akuhn

Powiązane problemy