2009-03-10 27 views
8

tôi đã tìm thấy ba cách để viết các điều kiện tương tự trong Ruby:Làm thế nào để viết 'nếu' mà không sử dụng 'rồi' hoặc 'kết thúc' trong Ruby

#1 
if 1==1 
    puts "true" 
end 

#2 
puts "true" if 1==1 

#3 
if 1==1 then puts "true" end 

Tại sao tôi không thể làm điều này?

#4 
if 1==1 puts "true" 

Tôi không hiểu:

  1. Tại sao sau đócuối là cần thiết trong số 3, và,
  2. Tại sao tôi cần phải thay đổi để có đượC# 2 công việc.

Tuyên bố # 4 có vẻ là cách tự nhiên nhất để viết điều này. Tôi không hiểu tại sao nó không thể.

Trả lời

19

Cú pháp "if x then y end" có nghĩa là cho điều kiện nhiều dòng trong khi biểu mẫu "y if x" có nghĩa là cho các câu lệnh điều kiện đơn dòng ngắn gọn. then là cần thiết trong trường hợp đầu tiên để báo cho Ruby biết tình trạng kết thúc (vì Ruby không yêu cầu parens như C), và end là cần thiết để nói với Ruby rằng toàn bộ khối if đã kết thúc (vì nó có thể là nhiều dòng).

Bạn có thể thay thế then bằng dấu chấm phẩy, vì cuối dòng cũng báo hiệu sự kết thúc của điều kiện. Bạn không thể loại bỏ số end bằng số nhiều if. Hoặc sử dụng biểu mẫu thứ hai hoặc toán tử bậc ba nếu bạn muốn một lớp lót ngắn gọn.

Ví dụ, giả

x = true 

sau đây sẽ đánh giá đúng, và trở về y

x ? y : 
=> y 

tương tự như vậy, điều này sẽ đánh giá sai và trở về không có gì

!x ? y : 
=> 

thêm một thuật ngữ sau ':' cho trường hợp khác

!x ? y : z 
=> z 
+0

"vì Ruby không yêu cầu parens như C" - Tôi quên điều đó. Ok, có ý nghĩa tại sao 'sau đó' là cần thiết. Không biết về dấu chấm phẩy - trông hơi kỳ lạ nhưng nó hoạt động. Rất hữu ích. Cảm ơn. –

+0

+1 cho dấu chấm phẩy. –

4

Cái này là cả hai cách thực sự là một cách tự nhiên để suy nghĩ:

nếu điều này là đúng thì làm điều gì đó

làm điều gì đó nếu điều này là đúng

Thấy không? Ruby cố gắng gần gũi với cú pháp tiếng Anh theo cách này. Chỉ cần kết thúc để kết thúc khối, trong khi ở phiên bản thứ hai, khối đã bị đóng với nếu.

Để thực sự trả lời câu hỏi của bạn, tôi cho rằng không có cơ hội nhận được thìkết thúc bị xóa. Nhớ Pascal/Delphi? Bạn có một số rồi ở đó. Nó chỉ điển hình cho các ngôn ngữ kiểu C để không có nó.

0

Điều gì về việc sử dụng dấu hai chấm thay vì sau đó như thế này? http://www.java2s.com/Code/Ruby/Statement/layoutanifstatementisbyreplacingthethenwithacolon.htm

Có nhiều cách khác nhau bạn có thể đoản mạch nếu bạn muốn làm như vậy.

Câu lệnh điều kiện chỉ là một phần của cú pháp Ruby để làm cho nó giống tiếng Anh hơn.

+0

Đối với những gì nó có giá trị, việc sử dụng dấu hai chấm này biến mất như của Ruby 1.9 - tương tự cho khi kiểm tra trong trường hợp phát biểu. Xem David Black "Con trai của 10 điều cần lưu ý trong Ruby 1.9" – Telemachus

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