2016-07-20 7 views
-1

Matlabでいくつかのスクリプトを実行していますが、これは長い間問題ありません。昨日はxxx.fieldsを使用して構造体のフィールド名にアクセスする動作を停止し、単純化されたコード例をここでMatlabスクリプト.field関数の動作が停止しました

a.b.one = 1; 
a.b.two = 2; 
a.b.three = 3; 
all_fields = fieldnames(a.b); % This works 
all_fields = a.b.fields; % This used to work, it suddenly stopped working. 

エラーメッセージがフィールド「非存在しないフィールドへの参照 『で示されているようです』。」、一部のコンピュータではall_fields = a.b.fields;が動作します。

私はMatlabのバージョンが異なるいくつかのマシンを持っています(2014aから2016aまで)。コードは数日前に円滑に動いていましたが、昨年からこのスクリプトを変更していた人はいませんでした。 Matlabに手動でアップデート/パッチを適用することはありませんでした。 matlabにはいくつかの自動更新機能がありますか?

filednamesを使用すると効果的ですが、既存のコードベースにかなりの量の書き換えが必要です。

ご協力いただければ幸いです。ありがとう。

+0

2番目のステートメントでは、問題の可能性がある**フィールド**の代わりに** fileds **にアクセスしています。しかし、再現可能な例を投稿することは良い考えです。 – mgilbert

+0

コメントありがとう、私は例を更新しました。 – Joe

+1

あなたの例では、そのエラーは発生しません、a.b.fieldsは '存在しないフィールドへの参照'フィールド 'エラーをスローします。構造体 'a'内の構造体' b'は 'fields'という名前のフィールドを持たないので、これは期待される動作です。 – mgilbert

答えて

1

この問題について話を止めましょう。MCVEとは関係ありません。質問に掲載された私の例は、問題を再現するのに十分です。ラインa.b.fields;については

a.b.one = 1; 
a.b.two = 2; 
a.b.three = 3; 
all_fields = fieldnames(a.b); % This works 
all_fields = a.b.fields; % This used to work, it suddenly stopped working without upgrading Matlab 

、Matlabのインスタンスは、ワークアウトのいくつかのあるものとないものがあります。 all_fields = a.b.fields;がうまくいく場合は、おそらく問題ありません。スクリプトを全員に適用するには、 all_fields = a.b.fields;all_fields = fieldnames(a.b);に変更して特定の条件を追加するだけです。

なぜ私は一部のコンピュータで動作するのかわかりませんが、他のコンピュータでは動作しません。これが深いレベルのMatlabエンジンのものなら、問題を閉じることにしましょう。すべてのあなたのコメントありがとう。

関連する問題