2015-10-09 19 views
5

Rất dễ sửa chữa; chỉ cần làm cho nó return nil, nhưng lý do tại sao mã của tôi không hoạt động nếu không có dòng đó?Tại sao mã của tôi chỉ in một lần?

function x(bool) 
    if bool then 
     return "!" 
    end 
end 

print(x(true), x(false), x(false)) 

Điều gì làm cho nó khó hiểu hơn, đó là luôn luôn in các nil, nhiều lần như tôi gọi x(false) trừ 1.

tôi dường như không thể quấn toâi vöôït xung quanh lý do tại sao điều này xảy ra.

+2

Số lượng giá trị được trả về bởi lệnh gọi hàm TRƯỚC KHI COMMA được điều chỉnh thành một, số giá trị của cuộc gọi cuối cùng không được điều chỉnh. Vì vậy, bạn có giá trị '1 + 1 + 0' được in –

Trả lời

6

The manual nói:

Nếu kiểm soát đạt đến cuối của một hàm mà không gặp phải một tuyên bố return thì hàm trả về không có kết quả.

Lưu ý rằng không có kết quả nào khác với trả lại nil.


Trong cuộc gọi này:

print(x(true), x(false), x(false)) 

cả x(false) lợi nhuận gì cả, tuy nhiên, tất cả ngoại trừ yếu tố cuối cùng luôn luôn điều chỉnh để chính xác một kết quả.

Thông thường chúng ta thấy các hàm gọi trả lại một hoặc nhiều kết quả chỉ còn lại kết quả đầu tiên. Tại đây, không có kết quả là cũng được điền bằng nil.

+0

Tôi không hiểu tại sao nó không chỉ in"! " Sau đó? Và tại sao không phải 2 nils? – warspyking

+0

@warspyking, như @YuHao đã nói, hàm cuối cùng không in 'nil', bởi vì nó không trả về' nil' (nó không trả về gì cả). Kết quả từ hàm thứ hai đến hàm cuối được hiển thị là 'nil', bởi vì mặc dù nó không trả về gì (giống như hàm cuối cùng), kết quả là * được điều chỉnh * thành' nil' để giữ đúng số kết quả. Thay đổi thành 'x (true), x (false), 1'; bạn muốn kết quả là '"! ", nil, 1' và không phải' "!", 1', đúng không? –

+0

@Paul Tôi cho rằng đó là sự thật, nhưng nếu nó muốn "giữ đúng số lượng kết quả" thì tại sao điều cuối cùng không điều chỉnh? – warspyking

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