読者です 読者をやめる 読者になる 読者になる

MATLABで参照型

MATLAB

Wikipediaには

MATLAB は参照を持たないため、オープンハッシュテーブル、線形リスト、木構造やその他計算機科学で一般的に用いられる間接参照を含むデータ構造を実装するのは困難である。

http://ja.wikipedia.org/wiki/MATLAB

なんて書いてあるけど,実はMATLABにも参照型は存在するらしい.クラスを「ハンドルクラス」として定義すると,そのクラスのオブジェクトは参照型になるとか.
以下コード例.「handle」クラスを継承したクラスは「ハンドルクラス」になります (紛らわしい).つまり以下のcounterクラスのインスタンスは参照型.

classdef counter < handle
  properties (GetAccess=public, SetAccess=private)
   count = 0
  end
  methods
    function incr(obj)
      obj.count = obj.count + 1;
    end
  end
end

c = counter
c.count % => 0
c.incr
c.count % => 1

なんだかとっても謎仕様.とはいえ,参照型が使えるようになったことで,リンクリストとかのデータ構造を定義したり,オブジェクトのプロパティを動的に書き換えたりできるようになるので,なにかとうれしい.値を書き換えるたびにオブジェクトをコピーするのと比較して,動作速度も速くなるんじゃないかな.
しっかし,関数型言語でもないのにオブジェクトは基本的にイミュータブルとか,あらためて考えると割ととんでもない仕様だなw

参考