7

関連する質問をいくつか見つけましたが、実際には答えが見つかりませんでした。

MATLAB で OOP 構文を学習するために、単純な小さな MATLAB クラスを作成しています。私は Python に非常に精通しており、MATLAB での作業に頭を悩ませています。定義は次のとおりです。

classdef Car < handle


    properties
        speed = [0,0]   %x,y velocity
        position = [0,0]
        running = false

    end

    methods
        function obj = Car(pos, spd)
            obj.position = pos;
            obj.speed = spd;
        end

        function accelerate(obj,x,y)    % Add to speed
            obj.speed = obj.speed + [x,y]
        end

        function position = getPosition(obj)
            position = obj.position
        end

        function start(obj)
            obj.running = true
        end

        function stop(obj)
            obj.running = false
        end
    end

end

これは確かに行われていませんが、小さなスクリプトを使用してオブジェクトをいじっています。

foo = Car([1,1],[0,2])
foo.start
foo.accelerate(2,3)

インスタンス化は機能しますが、呼び出すメソッドはすべてエラーをスローします。たとえば、次のようにします。

Error using Car/start
Too many input arguments.

私は何が欠けていますか??

4

3 に答える 3

24

この質問を削除する方法がわからないので、できる限りお答えします。他の言語と同様に、MATLAB でのオブジェクト指向プログラミングでは、 ( Pythonobjのように) クラス メソッドの最初のパラメーターとして表示する必要があります。selfオブジェクトへのこの参照は、その属性を変更するために必要です。これをメソッド定義に含めていなかったため、メソッドを呼び出したときに「引数が多すぎます」というエラーが発生しました。これfoo.method(a,b)は、オブジェクトfooが実際にパラメーターとして渡されるため、関数は実際に 3 つの入力を取得するためですmethod(foo,a,b)

コードをobj調べて適切な場所に追加しましたがclear、MATLAB コマンド ウィンドウでコマンドを使用できませんでした。私は MATLAB を初めて使用したため、その重要性を認識していませんでした。ファイルを保存して、クラスを再インスタンス化するだけで十分だと思いました。そうではない。

これが、この質問に出くわした人の助けになることを願っています。

于 2013-05-08T17:48:59.797 に答える
1

メソッドを static として宣言する場合、obj を入力に渡す必要はありません。

classdef class1
    methods (Static)
        function y=aPLUSb(a,b)
            y=a+b;
        end
    end
end
于 2015-08-02T17:19:11.127 に答える