foo.m
で定義された関数があるとします。この関数は、struct
のパラメータthing
を取ります。 foo
がthing
に変更されたら、私はthing
を "ロック"して変更できなくする必要があります。私は本質的にそれを一定にしたい。私はそれがラインのさらに下に変更されていないことを確認するためにこれをしたい。 Matlabでこれをどうやって行うのですか?既に作成されているMatlab構造を定数にするには?
答えて
解決策1:良いあなたの構造体を形成するかわからない場合には、事前に
を持っていますあなたは無名関数のハンドルにその変数を「捕獲」とだけ今からそれを使用して構造を参照することができますに。無名関数ハンドルは、作成時にワークスペースの状態を取得します。その要素は元の構造体のようにアクセスできますが、割り当てようとするとエラーが発生します。
など。
>> S_.a = 1;
>> S_.b = 2;
>> S = @() S_;
>> S_.a = 3;
>> S_
S_ =
scalar structure containing the fields:
a = 3
b = 2
>> S()
ans =
scalar structure containing the fields:
a = 1
b = 2
それはあなたが()
とそれを呼び出す必要があります迷惑を除き、構文でほぼ同じです。 私はここで端末でそれを使っていますが、明らかに関数のコンテキストでも簡単に使うことができます。
小さい警告; をに再定義して匿名関数を上書きすると、明らかに再定義されます。これは、再定義の際にアクセスした新しいワークスペースを継承するためです。
解決策2:あなたは、事前にあなたの構造体の形を知って良い場合:
はあなたの構造体は、フィールドのみa
とb
が含まれていることを事前に知っていると仮定します。 'SetAccess'を制限する同じプロパティを持つクラスを作成します。あなたのメインコードで次に
classdef ConstStruct
properties (GetAccess = 'public', SetAccess = 'private')
a
b
end
methods
%constructor
function obj = ConstStruct(S)
obj.a = S.a;
obj.b = S.b;
end
end
end
:
>> MyStruct = struct('a',1,'b',2)
MyStruct =
a: 1
b: 2
>> MyStruct = ConstStruct(MyStruct)
MyStruct =
ConstStruct with properties:
a: 1
b: 2
>> MyStruct.a
ans =
1
>> MyStruct.a = 2
You cannot set the read-only property 'a' of 'ConstStruct'.
あなたは
persistent
mlock
を使用してメモリ内にあなたの機能をロックする機能で変数を定義する必要があります。
mlock
以降のclear
機能は、それを削除しないように、メモリ内の現在実行中の機能をロックします。メモリ内の関数をロックすることで、ファイルに定義された永続変数が再初期化されなくなります。
別の解決策は、オブジェクト指向のコードを使用して満足している場合は、あなたの関数「定数」属性を持つプロパティを初期化メンバ関数を作ることです –
が実際にそれを考えるようになった、私は両方のOPの質問を誤解したと思う。私は彼らがまだ関数の最初のパス内に変数を 'ロック'したと思う。 –
これは知っておいてよかったですが、+1ですが、@タソスパパスタリアンヌの答えは私が探していたものに近いものでした。私は 'mlock'について知らなかった! – physmom
- 1. MATLABの構造体に構造体を作成するには? Cコードで
- 2. dir( './ folder')によって返されたMatlab構造を操作する
- 3. Pythonの構造体内にmatlab構造体をインポートする
- 4. 構造化されローカライズされたリソースを作成するには?
- 5. Matlab変数構造体にEvalinを割り当てる
- 6. matlabによる描画ハニカム構造
- 7. MATLABテーブルのサブセットに構造を適用するには?
- 8. mexファイルに構造を作成するには?
- 9. MATLABの構造体配列に構造体を割り当てる
- 10. ネストされた構造のサイズを設定するには?
- 11. matlabで生成された構造体から変数を呼び出す
- 12. 引数としてmatlab plot()に構造体を入力
- 13. リスト内包表記に中間データ構造が作成されています
- 14. Matlabの:私は5つのMatlabの構造体を持つ複数の構造体に
- 15. Matlabに大きい構造を格納する
- 16. net.sf.ehcache.ObjectExistsException:既定のキャッシュが既に設定されている
- 17. Schema.orgでカバーされていないタイプのデータ構造を作成するには?
- 18. データベース構造:他のテーブルによって参照されるPersonテーブルの作成
- 19. MATLABで構造体のプロパティの数を数えるにはどうすればよいですか?
- 20. 自身のリストを含む構造を作成するには?
- 21. ハンドル構造の変更後にMATLAB GUIがオブジェクトを「忘れる」
- 22. Octave/MATLAB:構造体の等価性を比較するには?
- 23. MATLAB - 構造
- 24. gpuメモリに渡された構造体は未定義です。構造体をCudafyに渡すには?
- 25. Web2py:データベース上にプレイリスト構造を作成して表示するには
- 26. Applescript:複数のフォルダに新しいフォルダ構造を作成する
- 27. Kohanaでメニューナビゲーション構造を作成するには?
- 28. 構造体のクラス拡張を作成するには?
- 29. 構造体にヌルポインタを作成する方法は?
- 30. 構造体の配列を作成するには?
@physmomあなたが構造体のフォームを事前に知っていると仮定して、より洗練されたソリューションで更新しました。 –
私は実際にこの「オブジェクトへのキャスト」メソッドを試してみます。それは私が探していたものにかなり近いようですが、私はどこかで定義された "ミラー"オブジェクトを持っているという考えが嫌いです。 – physmom
これは、同じ変数名を使用して古い構造体を上書きする理由です。良いプログラミングの習慣は、通常、異なる変数を保持する同じ変数に対して警告しますが、私はこの場合例外を作ることができると思います:) –