2012-04-26 31 views
34

Tôi biết có một cách viết tắt một dòng nếu/else trong Ruby:Có viết tắt hay không (nếu không có) tuyên bố trong Ruby on Rails?

a ? b : c 

Có một cho chỉ là một if tuyên bố duy nhất? Thay vì viết điều này:

if a 
    # do something 
end 

Có phiên bản ngắn gọn về điều này không?

+1

Chỉ cần sửa đổi nhỏ trong các điều khoản của bạn: 'a? b: c' cú pháp là một * biểu thức *, không phải là một * tuyên bố * - nó đánh giá đến giá trị duy nhất. –

+3

Lưu ý rằng 'a? b: c' được gọi là [biểu thức bậc ba] (http://en.wikipedia.org/wiki/%3F :). –

+1

@JasonLeBrun: bất kỳ thứ gì trong Ruby là một biểu thức (tức là trả về một giá trị). –

Trả lời

71

Bạn có thể sử dụng bài điều kiện (không nhớ tên, nó sẽ được đánh giá trước mã. Và do_something sẽ chỉ được thực hiện nếu điều kiện để đánh giá giá trị truthy (ví dụ: không nil hoặc false)).

do_something if a 
+0

thực sự tôi sai - bình luận delete.d –

+6

Tất nhiên, đó cũng là điều kiện nghịch đảo: 'do_something trừ khi a'. –

+0

rất hay để sử dụng với dấu ngoặc đơn, ví dụ: 'function ('a', 'b', ('c' nếu cái gì đó))' - đối số thứ ba sẽ là 'c' hoặc' nil' phụ thuộc vào 'cái gì'. – Markus

5
do_something if a 

này đầu tiên sẽ đánh giá if điều kiện (trong trường hợp này a) và nếu nó là true (hoặc trong trường hợp a, không false hoặc nil) nó sẽ thực hiện do_something. Nếu đó là false (hoặc nil), nó sẽ chuyển sang dòng mã tiếp theo không bao giờ chạy do_something.

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