Matlab: ссылка на переменную, а не переменную величину
Было очень сложно использовать документацию google, MATLAB, я потратил несколько часов, и я не могу научиться
x = 1
y = x
x = 10
y
ans = 10
что происходит вместо этого:
x = 1
y = x
x = 10
y
ans = 1
Значение x сохраняется в y. Но я хочу динамически обновлять значение y равным x.
Какую операцию я использую для этого?
Thanks.M
Ответы
Ответ 1
Matlab на 99% представляет собой среду с пересылкой, что вы только что продемонстрировали. 1%, который является передачей по ссылке, обрабатывает либо обрабатывает графику (не применимо здесь), либо обрабатывает классы, которые довольно близки к тому, что вы хотите.
Чтобы использовать класс дескриптора для выполнения того, что вы описали, поместите следующее в вызов файла RefValue
.
classdef RefValue < handle
properties
data = [];
end
end
Это создает класс "handle" с одним свойством "данные".
Теперь вы можете попробовать:
x = RefValue;
x.data = 1;
y = x;
x.data = 10;
disp(y.data) %Displays 10.
Ответ 2
вы можете попробовать что-то из следующего:
x=10;
y='x'
y
y =
x
eval(y)
x =
10
Ответ 3
В MATLAB это невозможно. Однако есть много способов получить подобное поведение. Например, вы можете иметь массив a = [1, 5, 3, 1]
, а затем индексировать его x
и y
. Для x = 2
вы можете назначить a(x) = 7
, y = x
и после изменения a(x) = 4
, a(y) == 4
.
Таким образом, индексирование может быть самым быстрым способом эмулировать ссылки, но если вы хотите получить изящное решение, вы можете пройти через символические переменные, как указывает @natan. Важно то, что в MATLAB нет указателей.
Ответ 4
Вы также можете определить неявный дескриптор на x
, указав функцию на y
и ссылаясь на нее:
x = 1;
y = @(x) x;
y(x) % displays 1
x = 10;
y(x) % displays 10