質問: matlab gui 変数 共有方法 matlabのアプリの設計を用いて、guiアプリを作成しております。 たくさんのボタンを設けて、それぞれのボタンにプログラムを書き込む作業をしておりました。 しかし、それぞれのボタンのコードは独立しており、他のボタンで格納した変数を、別のボタンで用いることができませんでした。 変数を共有する方法などはございますでしょうか。 よろしくお願いします。
回答: 関数内部で使った変数はローカル変数で、当該関数を抜けるとそれらローカル変数は全て解放されてしまいます。変数を残したい場合、関数内で”永続変数”を設けるか、予め関数の外に変数を設けます。この内、今の用途に最適なのは下記真ん中の”メンバ変数を作成して用いる方法”です。 関数内のローカル変数を永続変数persistent宣言する→今回は説明しません 関数が所属するクラスのプロパティを作成して用いる→今回はこれを使う グローバル変数を作成して用いる→今回は説明しません 具体的な説明をすると、app designerで自動生成されるクラスに対し、下記のようにプロパティを宣言します。 % app designerで自動生成されるクラスの冒頭部を抜粋 classdef app1 < matlab.apps.appbase % properties that correspond to app components properties (access = public) % access = publicは"クラス外からも参照可"の意味 uifigure matlab.ui.figure %ここに使いたい変数を定義する。初期値があれば定義に含める。下記は例 prop1 prop2 = 'some text' prop3 = sin(pi/12) end ボタンのコールバック関数を作成すると、下記のように初めから引数が追加されます。 app — app オブジェクト。このオブジェクトは、アプリ内の ui コンポーネント、およびプロパティとして格納されている他の変数にアクセスするために使用します。 event — ui コンポーネントのユーザー操作に関する特定の情報が含まれているオブジェクト。 % button pushed function: button function buttonpushed(app, event) app.prop1 = 'button is pushed!' disp(app.prop1); %この関数を抜けた後もprop1の内容は残る end この引数を用い”app.(変数名)”と書くと、予め作成したプロパティにアクセスできます。