2008-12-06 30 views
6

Gần đây tôi đã bắt đầu Erlang và tôi nhận thấy tôi liên tục nhận được "Cảnh báo: biến X không được sử dụng" trong khi biên dịch. Ví dụ: lấy hàm sau, tìm phần tử tối đa trong danh sách:Cảnh báo về các biến không sử dụng trong Erlang

max([Head|Tail]) -> 
     max(Head,Tail). 

    max(Element,[Head | Tail]) when Element < Head -> 
     max(Head,Tail); 
    max(Element,[Head | Tail]) -> 
     max(Element, Tail); 
    max(Element,[]) -> 
     Element. 

Trình biên dịch cảnh báo tôi rằng trong trường hợp thứ 3 của hàm, đầu không được sử dụng. Làm thế nào chức năng có thể được viết mà không có Head?

Trả lời

8

này nên ngăn chặn các cảnh báo mà không bị nhầm lẫn:

max(Element,[_Head | Tail]) -> 
    max(Element, Tail); 
6
max([Head|Tail]) -> 
     max(Head,Tail). 

    max(Element,[Head | Tail]) when Element < Head -> 
     max(Head,Tail); 
    max(Element,[_| Tail]) -> 
     max(Element, Tail); 
    max(Element,[]) -> 
     Element. 

Nên làm các trick. Lý do là thay thế 'Head' bằng '_' là cú pháp để nói rằng một tham số sẽ được đặt ở đó, nhưng tôi không cần nó.

9

Nếu bạn đặt tên biến là _ thay vì Name (ví dụ: _) biến sẽ không bị ràng buộc và bạn sẽ không nhận được cảnh báo.

Nếu bạn đặt tên cho một biến _Name thay vì Name (ví dụ _Head thay vì Head) biến sẽ bị ràng buộc, nhưng bạn sẽ vẫn không nhận được một cảnh báo. Tham chiếu biến bắt đầu bằng _ trong mã được coi là rất thực hành không tốt.

Bạn nên giữ tên biến để cải thiện khả năng đọc của mã (ví dụ: dễ đoán hơn số _Head được thiết kế chỉ hơn _).

+1

Hai câu cuối cùng của bạn mâu thuẫn với nhau. –

+0

Tôi nghi ngờ "sử dụng" trong trường hợp này có nghĩa là "sử dụng giá trị teh bị ràng buộc" thay vì "sử dụng cấu trúc _Name". – Vatine

+0

Với "sử dụng một biến" tôi có nghĩa là tham chiếu nó trong mã, và "sử dụng một tên biến" Tôi có nghĩa là đặt tên nó một cái gì đó. –

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