2009-03-13 6 views
10
temp = 98.3 
begin 
    print "Your temperature is " + temp.to_s + " Fahrenheit. " 
    puts "I think you're okay." 
    temp += 0.1 
end while temp < 98.6 

Yukarıdaki örnekte, başlangıç ​​ve bitiş arasında her şey bir blok mu?Başlar. . . bir 'blok' belirtilirken bitiyor?

Hala bir bloğun ne olduğu konusunda kafam karışık.

Eğer buna bir blok diyemiyorsanız, o kod ile başlangıç ​​ve bitiş arasında ne diyebilirdiniz? Bir yığın olarak adlandırmak doğru mu?

cevap

19

Block'ın özel bir anlamı vardır. Ruby'nin yaratıcısı olan According to Matz, bir bloğu isimsiz bir işlev olarak görebilir - genellikle yield olabilir ve parametreler de alabilir. Yakut sözdizimi anlatırken

Sen disamiguation aşağıdaki türde görebilirsiniz:

  • begin ... end (diğer dilde blok ne denir) bazen de ifade edilebilir basitçe ne olduğunu gibi Örneğin, expression (diğer ifadeler de başka ifadeler içerebilir - bir ifade, Ruby'de bir dönüş değeri olan bir şeydir). Bazı referanslar hala the Ruby syntax man page incelemek,
  • do ... end veya {...} hep örnekler için Ruby

bir block olarak anılacaktır karışıklığa biraz ekleyerek, bunu bir begin/end block veya code block arayacak , Örneğin

beginexpressionend
expressionwhileexpression
loopblock

Daha fazlasını okumak için, bkz:

8

begin/end kesinlikle akışını değil, bloklar kontrol edilmektedir.

begin 
    puts "hi" 
end 
# => "hi" 

Kod hemen çalışır. Eğer bir blok olsaydı, bu örnekte olduğu gibi kodun çalışması için bir şekilde çağrılması gerekirdi:

def a_method; end 
a_method { puts "hi" } 
# nothing.. 

def a_method 
    yield 
end 

a_method { puts "Hi!" } 
# => "Hi!"