Обращение к массиву данных, возвращаемому из функции get класса в Matlab - PullRequest
2 голосов
/ 30 января 2012

Я пытаюсь найти хорошее решение для следующей ситуации:

У меня есть класс:

classdef SomeClass < handle

    properties (Access = private)
        x
    end

    methods
        function x = getX(this)
            x = this.x;
        end
    end
end

Пусть x - некоторый массив данных.У меня есть возможность обратиться к некоторому элементу массива, как я бы сделал это в структуре:

struct.x(5)

Или я всегда должен делать это так:

myClassObj = SomeClass();
x = myClassObj.getX();
x(5)

илисоздать функцию getXAt?

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Да.Подобное обращение - это нормальное поведение свойства в объекте Matlab.Вы можете просто выставить свойство для чтения вместо того, чтобы сделать его полностью private.

classdef SomeClass < handle

    properties (SetAccess=private)
        x
    end

    methods
        function obj = SomeClass(x)
            obj.x = x;
        end
    end
end

Тогда вы можете обращаться к нему как к полю в структуре.

>> sc = SomeClass(1:7);
>> sc.x(5)
ans =
     5
>> 

Нет необходимостив Matlab, чтобы всегда создавать свои собственные функции доступа, как в Java.Вы можете независимо управлять доступом для чтения и записи к свойству, используя атрибуты для него.Если вам нужна более сложная логика доступа к свойствам, вы можете определить методы получения и установки с использованием специального синтаксиса function out = get.x(obj), и их поведение будет применяться к доступу к свойствам, выполненному с синтаксисом obj.x.

1 голос
/ 30 января 2012

В Matlab любой класс представляет собой массив классов.

Следовательно, вы можете написать свой класс следующим образом:

classdef SomeClass < handle

    properties (Access = private)
        x
    end

    methods (Access=public)        
        function this = SomeClass(x)
            this.x = x;
        end
    end

    methods
        function x = getX(this)                
            x = [this.x];
        end
    end
end

И доступ так:

s (1) = SomeClass (1);
s (2) = SomeClass (5);
s (3) = SomeClass (6);

s.getX ()

и =

1     5     6

s (2) .getX ()

ans =

5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...