我正在嘗試使用Matlab的一個有趣的實驗。這裏的目標是用一個簡單的二元模型來模擬一對量子糾纏粒子(暫時忽略「未知」或「疊加」狀態)。這不是尋找物理學建議,我知道這是一個量子位的過度簡化。我想模擬粒子的一個特定方面/過程。Matlab調用setter內部getter
被建模的過程是這樣的:每當你試圖「讀」粒子的狀態,你也改變粒子的狀態。在這種情況下,我只是建模了兩個純態0和1.這導致了一個有趣的編程問題,我無法在不破壞傳統編程智慧的情況下看到建模的方法。這是我第一次嘗試來源:
classdef qparticle
%qparticle class
% models spin state of one of two particles in a quantum entangled pair
properties
observed_spin_state;
end
properties (Hidden = true)
spinstate = [];
end
methods
function obj = qparticle(initspin)
if islogical(initspin)
obj.spinstate = initspin;
else
obj.spinstate = NaN;
end
end
function value = get.observed_spin_state(obj)
%Getting spin state changes spinstate
obj.spinstate = ~obj.spinstate;
value = obj.spinstate;
end
%% set.spinstate should be private, only callable by getspinstate
function obj = set.spinstate(obj, value)
if islogical(value)
obj.spinstate = value;
else
obj.spinstate = NaN;
end
end
end
end
我有一個總體類qpair
,這將保證在這兩個qparticle
s爲總是處於相反的狀態,但該代碼不需要這個。
我想我理解這裏發生了什麼,當我調用getter時,對象被「按值」傳遞 - 它的一個副本將傳遞給getter,所以當我發表聲明obj.spinstate = ~obj.spinstate
時, obj的本地副本被修改,但它不會被傳遞迴調用該函數的obj,因此該位的翻轉不會返回到父對象。
如果我使用setter,句柄類或其他函數返回對象本身,那麼我沒有辦法將實際值返回給調用函數(我認爲)。
我該如何在對象中使用單一方法本質上同時執行set/get? (如果我不能使用賦值運算符'=',那麼可以,如果它必須調用其他方法,那麼也可以)。
我很難理解你的代碼,你的描述只包含一個狀態變量,而你的代碼有兩個。此外,請描述您的代碼問題。你正在調用(一系列)方法,並且在某些時候你沒有得到預期的值。你能否舉個例子,包括你得到的和你期望的。 – Daniel
第二個狀態變量是保持調用函數未知的「真實」狀態變量(我在真實函數中忘記了Access = private)。當調用函數獲得觀察狀態時,則在返回觀察狀態之前修改真實狀態。在我的原始代碼中,觀察狀態將保持返回相同的值而不改變狀態(例如1,1,1,1,1)。我期望的是觀察狀態會隨着每個呼叫而改變(例如0,1,0,1,0,1,0,1)。 – Trashman