Can I Dynamically Overload A Class Method?
20 ビュー (過去 30 日間)
表示 古いコメント
Hi All,
Context: I'm attempting to overload a method of class without touching the class definition or explicitly declaring a subclass.
Question: Is it possible to dynamically overload a class method either by directly overloading, dynamically creating a subclass, or intercepting method calls?
Prior Work:
The odd error message produced by the following example gives me a dim hope that its possible directly . . .
Here's an example class
classdef Hello
methods
function sayHi(obj)
fprintf('Hi\n')
end
end
end
I then attempt to dynamically override the sayHi function, producing an error as follows:
helloObj = Hello;
sayHola = @(obj) fprintf('Hola\n')
helloObj.sayHi = sayHola;
Assignment not supported because the result of method 'sayHi' is a temporary value.
Is there a way to make "sayHi" produce a non temporary value? Or is that saying that @helloObj.sayHi is itself a temporary value?
0 件のコメント
採用された回答
Vimal Rathod
2019 年 7 月 29 日
A class function cannot be dynamically overloaded without creating subclass. The class protects its methods from getting modified or overloaded from outside as that changes the class definition.
In the given code,
helloObj = Hello;
sayHola = @(obj) fprintf('Hola\n')
helloObj.sayHi = sayHola;
HelloObj.sayHi is a temporary value as it is just an instance of the class and was not defined in the class declaration and thus it gets its own temporary copy of all properties and cannot overload its class functions.
3 件のコメント
その他の回答 (1 件)
Matt J
2019 年 7 月 29 日
編集済み: Matt J
2019 年 7 月 29 日
You can't dynamically overload a class method, but you can get the same effect by making function handle properties that dictate the method's behavior. For example,
classdef Hello
properties
greeting=@() fprintf('Hi\n');
end
methods
function sayHi(obj)
obj.greeting();
end
end
end
and now you can make dynamic changes, like
>> helloObj = Hello; helloObj.sayHi
Hi
>> helloObj.greeting = @()fprintf('Hola\n'); helloObj.sayHi
Hola
4 件のコメント
参考
カテゴリ
Find more on Interactive Control and Callbacks in Help Center and File Exchange
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!