Urbi "переключатель" ошибка оператора - PullRequest
1 голос
/ 26 августа 2011

Я работаю над проектом в Урби для Aibo ERS-7.Поскольку Urbi 2 недоступен для Aibo, я использую следующее:

URBI Language specif 1.0 - Copyright (C) 2005-2008 Gostai SAS
URBI Kernel version 1.5 rev. 51997ef

Мне интересно, почему следующий код генерирует ошибку.Он предназначен для случайного действия при громком шуме.Код ниже.

motor on;
robot.initial();
robot.stretch();

whenever (micro.volume >= 1000)
{
  randomval = random(16);
  switch (randomval)
  {
    case 0: //LF1
      legLF1.val = (random(254) - 120);
    case 1: //LF2
      legLF2.val = (random(100) - 9);
    case 2: //LF3
      legLF3.val = (random(148) - 29);
    case 3: //RF1
      legRF1.val = (random(254) - 134);
    case 4: //RF2
      legRF2.val = (random(100) - 9);
    case 5: //RF3
      legRF3.val = (random(148) - 29);
    case 6: //LH1
      legLH1.val = (random(254) - 120);
    case 7: //LH2
      legLH2.val = (random(100) - 9);
    case 8: //LH3
      legLH3.val = (random(148) - 29);
    case 9: //RH1
      legRH1.val = (random(254) - 134);
    case 10: //RH2
      legRH2.val = (random(100) - 9);
    case 11: //RH3
      legRH1.val = (random(148) - 29);
    case 12: //neck
      neck.val = (random(80) - 2);
    case 13: //headTilt
      headTilt.val = (random(60) - 16);
    case 14: //headPan
      neck.val = (random(182) - 91);
    case 15: //mouth
      mouth.val = (random(55) - 58);
  }
};

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

/MS/clap.u:50.10: syntax error, unexpected (
[0000037549]!!! 22.1-15: Error loading file: clap.u
[0000037549]!!! 22.1-15: Error with function eval: U596213128.load [nb param=1]
[0000037549]!!! 22.1-15: EXPR evaluation failed

Насколько я понимаю, ему не нравятся скобки в строке "switch",На самом деле я не вижу ссылки на «switch» в используемой версии, и она подсвечивается так, как будто она существует в редакторе Gostai, но об этом нет упоминания ни в одном журнале изменений вплоть до самой последней версии.Есть ли вообще, и если да, то что я делаю не так.В случае, если он не существует, я должен просто использовать кучу операторов if (пожалуйста, нет).

1 Ответ

2 голосов
/ 29 августа 2011

В urbi 1.0 действительно нет переключателя / регистра.

Лучшая альтернатива группе ifs - использовать массивы для хранения устройства и параметров:

var devices = [legLF1, legLF2, ...];
var ranges = [254, 100, ...];
var offsets = [...];

devices[randomval].val = random(ranges[randomval]) + offsets[randomval];
...