我正在努力使MATLAB比它更容易使用(對我而言),而我一直想解決的問題之一是更好的類構造函數。我想有以下接口:用於MATLAB的快速和骯髒的類構造函數?
MyClass.new(some_args).method1;
# instead of classical:
obj = MyClass(some_args);
obj.method1;
我可以很容易地通過定義一個靜態方法new
實現這一目標:
classdef MyClass
methods
function obj = MyClass(varargin); end
function method1(obj,varargin); end
end
methods (Static)
function obj = new(varargin); obj = MyClass(varargin{:}); end
end
end
但這需要增加這樣的方法的所有類,因此它是不是很優雅/便捷。我以爲我可以去圍繞它通過定義與下面的構造
classdef CommonClass
methods (Static)
function obj = new(varargin)
# getting name of the current file (Object), i.e. basename(__FILE__)
try clear E; E; catch E, [s, s] = fileparts(E.stack(1).file); end;
# creating object with name $s
obj = eval([s '(varargin{:})']);
end
end
end
classdef MyClass < CommonClass
end
一個共同的階級然而,這不起作用,因爲MATLAB要求從Object.m
new()
,所以我得到的Object
,而不是MyClass
實例。
任何想法,我可以改進它?
EDIT1:
我想它也適用於其他的人裏面創建類:
classdef MyAnotherClass < CommonClass
methods
function obj = MyAnotherClass
child = MyClass.new;
end
end
end
>> MyAnotherClass.new
你的方法很有趣,但沒有考慮到類可以通過`new`在其他類中創建:)這不是MATLAB風格,我知道。我只是想在我的m腳本中至少體驗一下Ruby的味道。 – 2010-12-03 22:45:00