Это действительно немного удивительно, что Синтаксис Matlab позволяет это. Я не знаю, почему это разрешено. Одной из причин может быть, чтобы позволить-петли на одной линии:
>> for i=1:3 disp(i);end
1
2
3
Но интересно, убрав пространство не допускается:
>> for i=1:3disp(i);end
for i=1:3disp(i);end
|
Error: Unexpected MATLAB operator.
Эта причина для этого, вероятно, что ряд с последующим d
является другой способ записи числа с плавающей запятой (3d10 == 3e10
), поэтому анализатор/токенизатор изначально думает, что вы определяете число, но затем путается, когда видит i
. Пример Daniel с fprintf
действительно работает, поскольку число, за которым следует f
, не является допустимым числом, поэтому токенизатор понимает, что вы начали новый токен.
Я думаю, что много лет назад (> 30?), Когда они определили синтаксис Matlab, они не предвидели, что это может привести к таким трудным проблемам. Я думаю, что matlab был первоначально написан инженерами для инженеров, а не кем-то, кто знает, как разработать язык программирования общего назначения. Другие языки, такие как C или Python, используют пунктуацию для разделения условий цикла из тела цикла, поэтому нет никакой двусмысленности. Я не знаю, можно ли по-прежнему исправлять синтаксис Matlab, поскольку он может сломать старый код, который опирается на текущее поведение.
По крайней мере, если вы используете в своем коде последнюю версию Matlab, редактор warns for various problems. Обратив внимание на маленькие красные штрихи на правой границе, вы могли бы сэкономить несколько часов отладки (но, возможно, вы использовали октаву). Я пытаюсь сделать привычкой исправить все предупреждения, которые он указывает.Для вашего кода, он показывает следующее:
Это странно! Является ли это Matlab или Octave - поскольку вы отметили как «оба»? Какая версия/какая платформа? – Floris
Я также подумал, что это было странно. Я пробовал как Matlab, так и Octave. Octave версии 3.2.4 и Matlab 7.13.0.564 оба выпускают один и тот же вывод. Оба на Ubuntu 12.04. –
Я собираюсь попробовать это, когда у меня есть второй ... – Floris