我想做一些類似于以下代碼的事情,其中??所有 3 個屬性都是靜態已知的大小,(1,10)而不必顯式重寫10at 屬性宣告。
classdef Example
properties(Constant)
length_of_vector = 10;
end
properties
x_data(1, Example.length_of_vector);
y_data(1, Example.length_of_vector);
z_data(1, Example.length_of_vector);
end
end
此語法無效,有沒有辦法在不重寫10所有三個地方的情況下完成此操作?我的真實用例有幾個維度具有靜態已知的大小,我真的希望能夠在宣告中指定它們的長度,以便維護人員知道預期的大小,但可以更改常量并自動更新所有依賴于它的屬性大小。
為了澄清,我可以做一些選擇:
classdef Example
properties(Constant)
length_of_vector = 10;
end
properties
% this gives the behaviour at runtime I want but don't want to have to specify the 10 literally
x_data(1, 10);
% this gives the correct initial conditions but is not quite the same thing
y_data(1, :) = zeros(1,Example.length_of_vector);
% this is what I am using now, if you change length_of_vector without modifying the
% 10 here it throws an error immediately so you get pointed to where you have to fix it
z_data(1, 10) = zeros(1,Example.length_of_vector);
end
end
它們的不同之處在于obj.x_data = pi,將 size 設定為(1,10)意味著它將 設定x_data為 1x10 向量,其中每個元素都是 pi,x.y_data = pi其中 size(1,:)將其設定為 1x1 pi,這意味著期望輸入具有完全相同大小的函式中斷(并且將數字逐字寫入大小比重構初始化代碼更輕松,該代碼確實obj.z_data = 50;在給定高度啟動模擬。)
uj5u.com熱心網友回復:
Example.length_of_vector在類的方法內部有效,在類外部也是有效的。我猜它在您的代碼中無效,因為 MATLAB 在遇到 時仍在加載類定義Example.length_of_vector,但Example尚未加載。
我可以想到兩種方法來解決這個問題:
在建構式中宣告屬性的大小:
function obj = Example obj.x_data = zeros(1, Example.length_of_vector); %... end以不同的方式定義常量。一種常用的方法是使用函式。您可以將此函式放在
classdef檔案的末尾,classdef塊外:classdef Example properties x_data(1, length_of_vector); y_data(1, length_of_vector); z_data(1, length_of_vector); end end function l = length_of_vector l = 10; end使用此方法,您的常量對您的類是私有的,無法從外部訪問。要使其公開,您必須向您的類添加一個回傳常量的靜態方法。
uj5u.com熱心網友回復:
希望代碼有幫助:
classdef Example
properties
length_of_vector = 10;
x_data ;
y_data ;
z_data ;
end
methods
% if u wont change the properties use function obj = Example()
% if u want to change the properties use function obj = New_value(obj)
function obj = New_value(obj)
obj.x_data = zeros(1, obj.length_of_vector);
obj.y_data = zeros(1, obj.length_of_vector);
obj.z_data = zeros(1, obj.length_of_vector);
end
end
end
用例:
a = Example;
輸出 :
a =
length_of_vector: 10
x_data: []
y_data: []
z_data: []
然后 :
a.New_value;
輸出 :
a =
length_of_vector: 10
x_data: [0 0 0 0 0 0 0 0 0 0]
y_data: [0 0 0 0 0 0 0 0 0 0]
z_data: [0 0 0 0 0 0 0 0 0 0]
當你想改變長度時:
a.length_of_vector = 15;
a.New_value
輸出 :
a =
length_of_vector: 15
x_data: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
y_data: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
z_data: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/378608.html
