2012-04-04 30 views
8

Tôi có hàm trả về [[]] và tôi muốn kiểm tra kết quả dưới dạng kiểm tra đơn vị. Nhưng tôi thấy rằng biểu thức [[]] == [[]] trả lại false. Dưới đây là một mã kiểm tra đơn giản:Biểu thức boolean OCaml [[]] == [[]]

# [[]] == [[]];; 
- : bool = false 

Ai đó có thể giải thích tại sao biểu thức này được đánh giá là sai?

Cảm ơn.

+0

Có thêm thông tin về sự bình đẳng về cấu trúc và vật lý trong một câu hỏi khác, http://stackoverflow.com/questions/1412668/does-have-meaning-in-oca ml/ – nlucaroni

Trả lời

13

Sử dụng = kể từ khi bạn có cấu trúc bình đẳng để so sánh hai giá trị:

# [[]] = [[]];; 
- : bool = true 

==tham khảo bình đẳng, nó chỉ trả về true nếu bạn tham khảo các bộ nhớ cùng một vị trí:

let a = [[]] 
let b = a 

# b == a;; 
- : bool = true 
9

Toán tử == trong OCaml có nghĩa là "bình đẳng vật lý". Tuy nhiên, bạn có hai danh sách khác nhau (vật lý). Có lẽ, bạn muốn "cấu trúc bình đẳng", được kiểm tra bởi =.

+0

Ok bây giờ tôi đã hiểu. Nhưng nó có nghĩa là [[]] đầu tiên là 'danh sách danh sách và danh sách danh sách thứ hai' b? – Atikae

+1

Có, mỗi '[]' phân bổ một danh sách mới (cf http://www.cs.jhu.edu/~scott/pl/lectures/caml-intro.html), nhưng cả hai danh sách không phải là * rất giống nhau * danh sách. – Matthias

+1

'[]' có cấu trúc và bình đẳng vật lý (giống như số nguyên). Nó không phân bổ một danh sách mới. Đó là các dấu ngoặc bên ngoài đang tạo danh sách mới, vì, '[[]] = ([] :: [])'. – nlucaroni

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