2013-09-04 37 views
10

Tôi đang gỡ lỗi một số mã MATLAB và muốn đảm bảo rằng hai tham chiếu đến một đối tượng thực sự đang đề cập đến cùng một đối tượng. Có cách nào để có được một định danh duy nhất cho các đối tượng (chẳng hạn như một địa chỉ bộ nhớ)?Bạn có thể nhận mã định danh duy nhất cho đối tượng MATLAB không?

Theo như tôi biết tôi không thể thêm ID của riêng mình vào các đối tượng, vì chúng là các luồng số ngẫu nhiên MATLAB.

+2

bạn có đang sử dụng 'RandStream' của MATLAB không? nếu như vậy nó đã là một lớp xử lý, và kế thừa toán tử equ = '' ('eq'). Quy tắc là khi so sánh các đối tượng xử lý, sử dụng toán tử 'eq' để kiểm tra xem các đối tượng có cùng xử lý hay không. Sử dụng 'isequal' để kiểm tra xem các đối tượng có các giá trị thuộc tính bằng nhau hay không, ngay cả khi các đối tượng đó có các xử lý khác nhau. Bỏ qua ngữ nghĩa tham chiếu, bạn có thể so sánh thuật toán, hạt giống và trạng thái nội bộ của hai luồng số ngẫu nhiên. – Amro

Trả lời

0

Bạn có thể sử dụng trường UserData, hiện diện trong mọi đối tượng đồ họa, để lưu trữ danh tính duy nhất do bạn tạo. Nếu làm việc với một lớp do người dùng định nghĩa, bạn có thể thêm một trường tương tự trong lớp của bạn.

Danh tính có thể được giữ độc đáo bằng cách sử dụng bộ đếm chung để gán cho mỗi danh tính mới.

+1

'UserData' không hiện diện trong mọi đối tượng. Nó có mặt trong tất cả các đối tượng Xử lý đồ họa, nhưng đó không phải là những gì mà OP hỏi. –

+0

@SamRoberts Cảm ơn, tôi vừa nhận ra và sửa câu trả lời –

5

Nếu bạn đang sử dụng OOP thì bạn có thể thêm thuộc tính ID và đặt nó trong khi xây dựng đối tượng.

java.rmi.server.UID() là một cách tốt đẹp để có được ID duy nhất của

Tuy nhiên thử nghiệm bởi == sẽ kiểm tra xử lý thực tế, vì vậy đây là chi tiết của một vấn đề khả năng sử dụng.

classdef yourClass < handle 

properties  
    ID 
end 

methods 
    function obj = yourClass() 
     obj.ID = java.rmi.server.UID(); 
    end 

end 

end 

Sau đó sẽ khá đơn giản để kiểm tra đối tượng của bạn.

5

Nếu các đối tượng bạn muốn so sánh là các dòng số ngẫu nhiên MATLAB (nghĩa là chúng thuộc lớp RandStream), thì chúng xử lý các đối tượng. Trong trường hợp đó bạn không cần ID duy nhất: nếu bạn so sánh chúng bằng cách sử dụng eq hoặc == và chúng bằng nhau, thì chúng là cùng một đối tượng.

Như bạn nói, bạn không thể thêm thuộc tính của riêng bạn vào đối tượng lớp RandStream, nhưng nếu bạn thực sự muốn bạn có thể phân lớp RandStream và thêm thuộc tính của riêng bạn vào lớp con. Bạn có thể lưu trữ số nhận dạng duy nhất trong thuộc tính, được tạo với char(java.util.UUID.randomUUID).

+0

Tôi không thể dễ dàng so sánh các tham chiếu vì chúng sống trong các phần khác nhau của mã. Có vẻ như hoặc là tôi phải thêm mã để có thể làm so sánh hoặc tôi phải phân lớp RandStream. (Tôi đã hy vọng cho một giải pháp dễ dàng hơn/nhanh hơn.) – jgosmann

+2

Tôi đoán có lẽ một cách dễ dàng hơn thế. Ví dụ, bạn có thể chạy mã thông qua trong chế độ gỡ lỗi, dừng tại mỗi điểm mà bạn có hai tham chiếu mà bạn muốn so sánh. Sau đó lưu chúng vào vùng làm việc cơ sở với 'assignin ('base', ...)'. Sau đó thoát trình gỡ rối và so sánh chúng. –

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