2014-02-07 5 views
0

У меня возникли проблемы с итерацией через массив ячеек строк, который является свойством константы в классе. Каждый раз, когда я пытаюсь индексировать массив ячеек от 1 до конца, происходит сбой Matlab. Что я могу делать неправильно?Невозможно выполнить итерацию через массив ячеек строк, который является постоянным свойством класса

код выглядит следующим образом:

classdef classA 
    properties(Constant) 
     ValidElements = {'Elem1', 'Elem2', 'Elem3'}; 
    end 
    properties 
     AInfo 
    end 
    function this = classA(info) 
     1stvalidelement = classA.ValidElements{1}; 
     validelementslist = classA.ValidElements{1:end}; 
     ... 
     ... 
     this.AInfo = info; 
    end 
    ... 
end 

Внутри конструктора, первая линия выполняет хорошо, без каких-либо проблем, но на 2-ой линии аварии Matlab. Я совершенно не знаю, почему это может быть. Пожалуйста, помогите мне.

Спасибо.

+0

"MATLAB аварии" ... как в: MATLAB выходит без предупреждений или ошибок? Вы получаете segfaults? Какие ошибки вы видите? –

+0

Я вижу ошибку нарушения прав доступа, но то же самое работает, когда ValidElements является локальной переменной, и я пытаюсь получить к ней доступ. Я имею в виду ошибку нарушения доступа. – DEEPMALA

+0

Кроме того, я заметил, что всякий раз, когда я индексирую использование чисел, таких как Block.ValidElements {1: 2}, он не сбой, но как только я начинаю использовать Block.ValidElements {1: end}, он сбой. Weird !!! Но каждый раз он возвращает только значение 1-го элемента ячейки. – DEEPMALA

ответ

0

Ну, с одной стороны, вы используете фигурные скобки, где вы (вероятно) подразумеваете использование круглых скобок.

Сравнить

>> A = {'one' 'two' 'three'}'; 
>> A{1:2} 
    ans = 
     one 
    ans = 
     two 
>> A(2:3) 
    ans = 
     'two' 
     'three' 

Разница заключается в том, что parenthsis (()) будет возвращать часть клетки в новую ячейку, в то время как Curlies ({}) вернет записи ячейки как (comma- разделенный) список. Таким образом, фигурные скобки возвращают несколько значений в этом случае, которые вы пытаетесь присвоить переменной .

С другой стороны, функция доступа к свойству не находится в блоке метода (Static).

И еще одно, 1stvalidelement не является допустимым именем переменной.

Поэтому:

classdef classA 
    properties(Constant) 
     ValidElements = {'Elem1', 'Elem2', 'Elem3'}; 
    end 
    properties 
     AInfo 
    end 

    method (Static) 

     function this = classA(info) 
      firstvalidelement = classA.ValidElements{1}; 
      validelementslist = classA.ValidElements(1:end); 
      ... 
      ... 
      this.AInfo = info; 
     end 

     ... 

    end 
end 
+0

На самом деле, это утверждение было просто для того, чтобы указать, что я пытаюсь получить доступ к строковому значению и пытаться индексировать от 1 до конца, а не к ячейке, даже если он возвращает несколько значений, я фактически конкатенирую возвращающие строки. – DEEPMALA

+0

@DEEPMALA: Смотрите мои правки; возможно, они помогают, но, учитывая характер ваших ошибок, я подозреваю, что проблема в другом месте ... –