2012-05-29 25 views
6

Một điều tôi thích về Ruby là bạn có thể diễn đạt mọi thứ theo cách ngắn nhất có thể.Viết tắt cho "return x if x" trong Ruby

Tôi biết rằng người ta có thể làm, khi giao

x ||= a 
# instead of 
x = a unless x 
# which is 
x = x || a 

Có một hình thức tương tự cho return?

# instead of 
return x if x 

Tôi đang cố gắng "chỉ" x chỉ một lần. This question hỏi về việc chỉ trở lại (không có gì), nhưng tôi không thấy làm thế nào để làm điều đó khi trả lại một cái gì đó khác hơn là void.

+0

Điều gì sai khi thay thế 'return x if x' bằng' x' đơn giản? – Zabba

+2

@Zabba Nó không nhất thiết phải là tuyên bố cuối cùng –

+3

Có lẽ kỹ năng toán học của tôi đã xấu đi, nhưng không phải là những gì bạn đã có một lớp lót? –

Trả lời

4

Tôi chỉ về chắc chắn rằng có tồn tại không viết tắt cho thứ hai của bạn ví dụ-và cũng không ai có thể được viết mà không sửa đổi cú pháp-từ của Ruby nó không phải là một thành ngữ phổ biến đủ. Xin lỗi, bro, nhưng có vẻ như bạn sẽ phải nói chi tiết về điều này. (Mặc dù, thực sự, theo như sự động từ đi, cái này không phải là tất cả những điều xấu.)

(Lưu ý, ví dụ đầu tiên không hoàn toàn đúng: x ||= a tương đương với x = x || a, cũng có thể được biểu thị dưới dạng x = a unless x.)

+1

Bạn nói đúng, tôi vừa sửa lại. Vì bạn "chắc chắn", tôi sẽ đợi một chút và thừa nhận đây là câu trả lời 'trừ khi' ai đó khác có. Vì vậy, 'trả lời = của bạn; answer || = new_answer' hoặc tôi nên nói 'return new_answer if new_answer; của bạn; ';) –

-1

bạn có thể bỏ qua lợi tức nếu đó là câu lệnh cuối cùng trong một mã khối.

dụ

irb(main):002:0> def b(c) 
irb(main):003:1> c if c 
irb(main):004:1> end 
=> nil 
irb(main):005:0> b(4) 
=> 4 
irb(main):006:0> b(nil) 
=> nil 
irb(main):007:0> b(true) 
=> true 
irb(main):008:0> b(false) # TADA!!! 
=> nil 
+0

Tôi có thể chắc chắn bỏ qua 'return' nếu đó là câu lệnh cuối cùng của tôi, nhưng ý định của tôi là nói' c' chỉ một lần. Và trong trường hợp của tôi, tôi cũng muốn trình bày những tuyên bố không phải là cuối cùng! –