2015-01-12 13 views

Odpowiedz

7

Według The Ruby Programming Language książki sekcji 5.2.1:

do kluczowe w while lub until pętli jest jak then słowa kluczowego w if stwierdzeniem: to może być całkowicie pominięte, o ile nowa linia (lub średnik ) pojawia się między stanem pętli a ciałem pętli.

Nie, to nie zmieni zachowania, to tylko opcjonalna składnia.

6

Dowiedz się!

uzyskać szybką odpowiedź możemy spojrzeć na dokumentacji Ruby i wybrać http://www.ruby-doc.org/core-2.1.1/doc/syntax/control_expressions_rdoc.html#label-while+Loop w którym stwierdza, że ​​

Instrukcja do słów kluczowych jest opcjonalna.

OK, więc te dwa przykłady są równoważne, ale czy są identyczne? Mogą zrobić to samo, ale być może istnieje powód, by faworyzować jednego nad drugim. Możemy przyjrzeć się AST, które generują te przykłady i zobaczyć, czy są jakieś różnice.

> gem install ruby_parser 
> irb 

> require 'ruby_parser' 
=> true 
> with_do = <<-END 
while true do 
    puts "Hi" 
    break 
end 
END 
=> "while true do\n puts \"Hi\"\n break\nend\n" 
> without_do = <<-END 
while true 
    puts "Hi" 
    break 
end 
END 
=> "while true\n puts \"Hi\"\n break\nend\n" 
> RubyParser.new.parse with_do 
=> s(:while, s(:true), s(:block, s(:call, nil, :puts, s(:str, "Hi")), s(:break)), true) 
> RubyParser.new.parse without_do 
=> s(:while, s(:true), s(:block, s(:call, nil, :puts, s(:str, "Hi")), s(:break)), true) 

Nie. Te dwa przykłady wykonują dokładnie te same instrukcje, abyśmy mogli wybrać dowolny styl, który uważamy za łatwiejszy do odczytania. Najczęstszym sposobem jest pominięcie do, gdy jest to możliwe: https://github.com/bbatsov/ruby-style-guide#no-multiline-while-do

+0

To jest interesujące (muszę przejrzeć 'ruby_parser'), ale niepotrzebnie trudno odczytać wszystkie podpowiedzi' irb'. Proponuję usunąć je. –

+0

@CarySwoveland można edytować monity i pomóc lepiej zadać to pytanie. – DiegoSalazar

+0

@ diego.greyrobot, prawie nigdy nie edytuję tego, co napisali inni. Jak widzę, są właścicielami słów, więc nie mogę nic więcej niż sugerować zmian. (Bardzo stara szkoła, wiem.) Czy potrafisz odgadnąć moją reakcję, gdy inni edytują to, co napisałem? :-) –

Powiązane problemy