2015-01-12 13 views

Trả lời

7

Theo The Ruby Programming Language cuốn sách Mục 5.2.1:

Từ khóa do trong một while hoặc until loop cũng giống như từ khóa then trong một tuyên bố if: nó có thể được bỏ qua hoàn toàn miễn là một dòng mới (hoặc dấu chấm phẩy) xuất hiện giữa điều kiện vòng lặp và thân vòng lặp.

Vì vậy, không, nó sẽ không thay đổi hành vi, nó chỉ là cú pháp tùy chọn.

6

Hãy tìm hiểu!

Đối với một câu trả lời nhanh chúng ta có thể nhìn vào tài liệu của Ruby và tìm http://www.ruby-doc.org/core-2.1.1/doc/syntax/control_expressions_rdoc.html#label-while+Loop trong đó nêu rằng

Các làm từ khóa là không bắt buộc.

Ok vì vậy hai ví dụ này tương đương nhau nhưng chúng giống nhau không? Họ có thể làm điều tương tự nhưng có thể có một lý do để ủng hộ người khác. Chúng ta có thể nhìn vào AST những ví dụ này tạo ra và xem có sự khác biệt nào không.

> 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) 

Không. Hai ví dụ này thực hiện cùng một hướng dẫn chính xác để chúng tôi có thể chọn bất kỳ kiểu nào mà chúng tôi dễ đọc hơn. Một sở thích chung là bỏ qua số do khi có thể: https://github.com/bbatsov/ruby-style-guide#no-multiline-while-do

+0

Điều này thật thú vị (tôi phải xem 'ruby_parser'), nhưng không cần thiết khó đọc với tất cả lời nhắc' irb'. Tôi đề nghị bạn loại bỏ chúng. –

+0

@CarySwoveland bạn có thể chỉnh sửa lời nhắc và giúp câu hỏi này đẹp hơn. – DiegoSalazar

+0

@ diego.greyrobot, tôi hầu như không bao giờ chỉnh sửa những gì người khác đã viết. Khi tôi nhìn thấy nó, họ sở hữu những từ ngữ, vì vậy tôi không thể làm gì hơn đề xuất những thay đổi. (Trường học rất cũ, tôi biết.) Bạn có thể đoán phản ứng của tôi khi những người khác chỉnh sửa những gì tôi đã viết? :-) –

Các vấn đề liên quan