2010-09-14 13 views
5

Neden küme parantezlerini if/else yapılarında kullanamıyorum? Python'u bıraktım, ifadeleri dikkatli bir şekilde girerek rahat hissetmedim.Kıvırcık parantezleri Ruby'de/else kullanabilir miyim?

Bu, Ruby'de de aynı şekilde mi? Örneğin, böyle bir şey yazabilir miyim?

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

Bunu yapmak için kaşlı ayraç kullanmanın herhangi bir yolu var mı? Blokları da okudum, ancak if/else ifadelerinde nasıl kullanılabileceğini bilmiyorum.

+1

sen işlerin nasıl görüneceğini görebiliyor musunuz – dave

+1

@dave başka bir göz atmanız gerekiyor .. akılda kabul ederek :) – Jeet

+8

Burada bir hata yaptığınızı düşünüyorum. Bir dilin sözdizimini beklentilerinize (en azından Ruby'de değil) bükemezsiniz. Bunun yerine, beklentilerinizi bir dilin söz dizimine doğru bükmeniz gerekecektir. Bu sadece yeni bir dil öğrenmenin bir parçası. Kodunuzu girerken kendinizi rahat hissetmiyorsanız, daha iyi bir IDE veya editör kullanın. Yapman gereken bir şey, bu yüzden sadece bir sorun olmamalı. – AboutRuby

cevap

4

Nope. } yerine end kullanmanız gerekir.

14

Kıvırcık parantezleri kullanamazsınız, ancak girinti de önemli değildir. Bir kapanış ayracı yerine, Ruby end anahtar sözcüğünü kullanır.

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

Hala olsa dikkatle girinti öneriyoruz - kötü girintili kod parantez doğru kullanılsa bile insan okuyucuların kandırmak olacaktır.

+0

ama büyük yapılar için dağınık hale gelir .. – Jeet

+0

+1 parantez üzerinde uygun girintilemenin önemini vurgulamak için. Görülebilirlik kraldır. –

+0

@iAdam: Üzgünüm - büyük yapılar için ne dağınıklık yapar? – Chuck

12

Bu şirin:

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

Kullanım şöyle:

Eğer sadece bu yüzden sizin için otomatik biçim olabilir bir IDE kullanarak denemek isteyebilirsiniz biçimlendirme ile zor anlar yaşıyorsanız
my_if(token == "hello") { 
    puts "hello encountered!" 
} 
+0

Daha da fazla eğlence için, Smalltalk'ın yaptığı gibi 'TrueClass' ve' FalseClass' üzerinde 'if' tanımlayın. – akuhn

İlgili konular