2010-10-17 31 views
61

Khi học Ruby, tôi nhận thấy rằng trong tất cả các ví dụ không có dấu chấm phẩy. Tôi biết rằng điều này là hoàn toàn tốt miễn là mỗi tuyên bố là trên dòng riêng của mình. Nhưng những gì tôi đang tự hỏi là, có thể bạn sử dụng dấu chấm phẩy trong Ruby?Bạn có thể sử dụng dấu chấm phẩy trong Ruby không?

Cảm ơn trước!

+0

Và đối với người dùng Ruby ở đó: Có nên sử dụng dấu chấm phẩy không? Có lợi ích khi làm như vậy không? Tôi biết rằng khi tôi viết mã Ruby, tôi theo phản xạ thêm chúng. –

+0

@Andy Không sử dụng dấu chấm phẩy, trừ khi bạn muốn đặt nhiều câu lệnh trên một dòng, mà [bạn nên tránh làm anyway] (http://www.caliban.org/ruby/rubyguide.shtml#semicolon). –

+0

@Yaser: Tôi cần loại dấu chấm phẩy.Bởi vì khi có một chức năng trên một dòng mà không có dấu chấm phẩy, hãy tự động sửa cho tôi, mà tôi không muốn xảy ra. –

Trả lời

85

Có.

Ruby không yêu cầu chúng tôi sử dụng bất kỳ ký tự nào để phân tách các lệnh, trừ khi chúng tôi muốn chuỗi nhiều câu lệnh cùng nhau trên một dòng. Trong trường hợp này, dấu chấm phẩy (;) được sử dụng làm dấu phân cách.

Nguồn: http://articles.sitepoint.com/article/learn-ruby-on-rails/2

+1

Tuyệt vời, cảm ơn! –

+0

nhưng tôi có nên sử dụng dấu chấm phẩy không? – rocketspacer

1

Có, dấu chấm phẩy có thể được sử dụng làm dấu phân tách câu lệnh trong Ruby.

Mặc dù phong cách điển hình của tôi (và hầu hết mã tôi thấy) đặt một dòng mã trên mỗi dòng, do đó việc sử dụng ; là khá không cần thiết.

26

Là một mặt lưu ý, đó là hữu ích để sử dụng dấu chấm phẩy trong của bạn (j) phiên IRB để tránh in ra một giá trị biểu ridiculously dài, ví dụ

irb[0]> x = (1..1000000000).to_a 
[printout out the whole array] 

vs

irb[0]> x = (1..100000000).to_a; 1 
1 

đẹp đặc biệt cho các cuộc gọi MyBigORMObject.find_all của bạn.

2

Tình huống duy nhất tôi gặp phải về dấu chấm phẩy đó là hữu ích khi khai báo các phương thức bí danh cho attr_reader.

Xét đoạn mã sau:

attr_reader :property1_enabled 
attr_reader :property2_enabled 
attr_reader :property3_enabled 

alias_method :property1_enabled?, :property1_enabled 
alias_method :property2_enabled?, :property2_enabled 
alias_method :property3_enabled?, :property3_enabled 

Bằng cách sử dụng dấu chấm phẩy chúng ta có thể giảm này giảm 3 dòng:

attr_reader :property1_enabled; alias_method :property1_enabled?, :property1_enabled 
attr_reader :property2_enabled; alias_method :property2_enabled?, :property2_enabled 
attr_reader :property3_enabled; alias_method :property3_enabled?, :property3_enabled 

Đối với tôi điều này không thực sự lấy đi từ dễ đọc.

3

Dấu chấm phẩy: có.

irb(main):018:0> x = 1; c = 0 
=> 0 
irb(main):019:0> x 
=> 1 
irb(main):020:0> c 
=> 0 

Bạn thậm chí có thể chạy nhiều lệnh được phân cách bởi dấu chấm phẩy trong một vòng lặp một liner

irb(main):021:0> (c += x; x += 1) while x < 10 
=> nil 
irb(main):022:0> x 
=> 10 
irb(main):023:0> c 
=> 45 
0

Nó có thể là thú vị để sử dụng dấu chấm phẩy để bảo tồn cú pháp khối như trong ví dụ này:

a = [2, 3 , 1, 2, 3].reduce(Hash.new(0)) { |h, num| h[num] += 1; h } 

Bạn duy trì một dòng mã.

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