2010-02-11 26 views
11

Xét đoạn mã sau:Ruby - dòng mới và khai thác

x = 4 
y = 5 
z = (y + x) 

puts z 

Như bạn mong muốn, đầu ra là 9. Nếu bạn giới thiệu một dòng mới:

x = 4 
y = 5 
z = y 
+ x 

puts z 

Sau đó, kết quả là 5. Điều này có ý nghĩa, bởi vì nó được hiểu là hai câu riêng biệt (z = y+x).

Tuy nhiên, tôi không hiểu tại sao nó hoạt động khi bạn có một dòng mới trong ngoặc đơn:

x = 4 
y = 5 
z = (y 
+ x) 

puts z 

Đầu ra là 4. Tại sao?

Trả lời

12

(Disclaimer:.. Tôi không phải là một lập trình viên Ruby tại tất cả Đây chỉ là một đoán hoang dã)

Với Parens, bạn sẽ có được z được gán giá trị của

y 
+x 

nào để đánh giá giá trị của câu lệnh cuối được thực hiện.

+0

+1. Tôi đã cố gắng để giải thích khái niệm cơ bản của các lệnh chưa hoàn thành khi tôi nhận ra rằng đầu ra là 4, không 9. Tốt đi :) – Matchu

+0

Điều đó làm cho rất nhiều ý nghĩa. Tôi đã đến từ ví dụ tương tự ở Scala, nơi nó xử lý nó như z = (y + x) và đầu ra 9. Giải thích tốt :-) – mopoke

+1

Dấu ngoặc đơn là bản chất khối và giá trị của khối là câu lệnh cuối cùng trong nó. – kejadlen

4

Kết thúc dòng bằng \ để tiếp tục biểu thức trên dòng tiếp theo. Điều này sẽ cho kết quả đúng:

x = 4 
y = 5 
z = (y \ 
    + x) 
puts z 

đầu ra 9

Tôi không biết tại sao kết quả là bất ngờ mà không cần thoát khỏi dòng mới. Tôi chỉ học không bao giờ làm điều đó.

3

Vâng, bạn sẽ không cần phải nhân vật thoát \ nếu dòng của bạn kết thúc với các nhà điều hành

a = 4 
b = 5 
z = a + 
    b 

puts z 
# => 9 
+0

Tôi sử dụng kỹ thuật này để kết thúc một dòng với một dấu chấm nếu tôi đang xích lại với nhau một loạt các phương pháp. –

+0

Có, là cách tốt nhất để phá vỡ các dòng mã –