2013-02-10 37 views
10

Nó đã rất khó khăn để sử dụng google, tài liệu MATLAB, tôi đã dành một vài giờ, và tôi không thể học cáchMatlab: Liên kết để thay đổi, không giá trị biến

x = 1 
y = x 
x = 10 
y 

ans = 10 

những gì xảy ra thay thế là:

x = 1 
y = x 
x = 10 
y 

ans = 1 

Giá trị của x được lưu vào y. Nhưng tôi muốn cập nhật động giá trị của y bằng x.

Tôi sử dụng hoạt động nào để thực hiện việc này?

Thanks.M

+1

Bạn muốn tìm kiếm con trỏ trong MATLAB . Tìm kiếm nhanh của tôi không bật lên bất cứ điều gì, nhưng điều đó có thể giúp bạn w/Googling. – Dan

+1

Tôi rất muốn nghĩ rằng bạn đang tiếp cận vấn đề một cách sai lầm nếu bạn cần một cái gì đó hoạt động giống như một con trỏ ... Có liên quan [bình luận] (http://www.edaboard.com/thread46260.html#post210526) mã MATLAB là một kịch bản, sẽ được biên dịch thành mã giả trong trường hợp của một hàm. Tôi không nghĩ rằng nó hữu ích khi nghĩ về nó như bạn 'd làm trong C++. Tôi đoán bạn nên xem đối số đi ngang qua tham chiếu nếu bạn muốn giảm số lượng đối số, đặt chúng vào một vector hoặc trong cấu trúc. * " – plesiv

+0

Bạn không chỉ cần con trỏ/hành vi tham chiếu khi truyền đối số cho hàm. Bạn có thể muốn nó đơn giản để tránh lặp lại x (2) .y (4) .z (7) .w (i) trong mã của bạn. Và thông thường, bạn không muốn chỉ đọc truy cập vào biến/trường.Ở đây, chỉ có các tên biến/trường đơn được sử dụng, nhưng trong mã tốt, các tên biến/trường là mô tả và do đó dài hơn. – user36800

Trả lời

5

bạn có thể thử một số điều sau đây;

x=10; 
y='x' 
y 

y = 
    x 

eval(y) 
x = 
    10 
+0

Có, điều này rất gần. –

1

Trong MATLAB, điều này là không thể. Tuy nhiên, có rất nhiều cách để có được hành vi tương tự. Ví dụ: bạn có thể có một mảng a = [1, 5, 3, 1] và sau đó lập chỉ mục theo xy. Đối với x = 2, bạn có thể chỉ định a(x) = 7, y = x và sau khi bạn thay đổi a(x) = 4, a(y) == 4.

Vì vậy, việc lập chỉ mục có thể là cách nhanh nhất để mô phỏng các tham chiếu, nhưng nếu bạn muốn có một số giải pháp thanh lịch, bạn có thể đi qua các biến tượng trưng như @natan chỉ ra. Điều quan trọng cần thực hiện từ việc này là có không có con trỏ trong MATLAB.

13

Matlab là 99% môi trường truyền theo giá trị, đó là những gì bạn vừa chứng minh. 1% là pass-by-reference là các xử lý, hoặc là xử lý đồ họa (không có liên quan ở đây) hoặc xử lý các lớp, mà là khá gần với những gì bạn muốn.

Để sử dụng lớp xử lý để làm những gì bạn mô tả, hãy đưa thông tin sau vào cuộc gọi tệp RefValue.

classdef RefValue < handle 
    properties 
     data = []; 
    end 
end 

Điều này tạo ra lớp "xử lý", với một thuộc tính duy nhất được gọi là "dữ liệu".

Bây giờ bạn có thể thử:

x = RefValue; 
x.data = 1; 
y = x; 
x.data = 10; 
disp(y.data) %Displays 10. 
1

Bạn cũng có thể xác định một xử lý ngầm trên x bằng cách định nghĩa một hàm trên y và đề cập đến nó:

x = 1; 
y = @(x) x; 
y(x) % displays 1 
x = 10; 
y(x) % displays 10 
Các vấn đề liên quan