Jump/ru

From Second Life Wiki
< Jump
Revision as of 02:34, 10 November 2013 by Fashion Atlas (talk | contribs) (некоторые слова "ошибка" (word "bug") изменим на "косяк" и"глюк")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.








Template:Issues/SVC-6712Template:Issues/SCR-256Template:Issues/SVC-1929




Template:Label target;

Template:Label target;
• label Template:Target Название метки внутри функции или события области видимости.

@target;

Метка, в которую можно прыгнуть, если скачок в той же области видимости или в младшей (производной) области видимости. Это не возможно для перехода между областями видимости (например, между функциями, событиями или состояниями).

• label target

Caveats

Предостережения

  • Только в LSO-режиме скрипта: Если несколько источников скачка высказались за ту же метку цели в пределах видимости, то только первая (сверху вниз, слева направо) будет функционировать как и ожидалось, все остальные по-умолчанию откажут.
  • Метки находятся в области видимости при событийном и функциональном уровне, что значит невозможность объявить одинаковые метки в том же событии или функции, даже если метки заключены в другие условные-операторы, циклы и подобное. -- SVC-6712
    • Попытка такого использования приведет к бесполезной CIL-сигнла_сборки (assembly) об косяке подключения. -- SCR-256
  • Если код существует после возвращения, не инкапсулированного в структуру управления потоком, компилятор выдаст сообщение ошибки о падении кода, даже если код доступен с прыжка. -- SVC-1929

Examples

Примеры <lsl>integer a = 5; jump over; @in; a = 6; @over; llOwnerSay((string)a); if(a < 6)

   jump in;

//скрипт будет, скажем, 5, а затем 6</lsl> <lsl> integer getLinkWithName(string name) {

   integer i = llGetLinkNumber() != 0;   // Начинается с нуля (единственный прим) или 1 (два или более примов)
   integer x = llGetNumberOfPrims() + i; // [0, 1) or [1, llGetNumberOfPrims()]
   for (; i < x; ++i) 
   {
       if (llGetLinkName(i) == name) 
           jump break; // Нашел! Ранний выход из цикла с результатом
   }
   i = -1; // Нет примитива (prim) с таким именем, возврат   return -1.
   @break;
   return i;

} </lsl> Чаще всего довольно уродливый "прыжок" можно избежать, особенно в пользовательские функции, как это демонстрирует версия вышеприведенного скрипта <lsl> integer getLinkWithName(string name) {

   integer i = llGetLinkNumber() != 0;      // Начинается с нуля (единственный прим) или 1 (два или более примов)
   integer x = llGetNumberOfPrims() + i; // [0, 1) or [1, llGetNumberOfPrims()]
   for (; i < x; ++i) 
   {
       if (llGetLinkName(i) == name) 
           return i;                    // Нашел его, вернуть его индекс       
   }
   return -1;     // Нет примитива (prim) с таким именем, возврат   return -1.

} </lsl>

Notes

Заметки

Как правило, считается нецелесообразным использовать скачки (часто называемая GOTO) там, где могут быть использованы другие управляющие структуры.

See Also

См.также

Ключевые слова

•  return
•  state
•  label

Deep Notes

LSO VM Notes

Детальные заметки

Глюк многократного скачка

Следующая функция jumpy демонстрирует косяк "несколько прыжков-источников к одной цели". Похоже, здесь функция должна привести к бесконечному циклу, что происходит при компиляции сценария для Mono VM. Однако при компиляции для LSO VM из-за даного глюка второй прыжок никогда не происходит и функция возвращается. LL сообщили, что не желают исправить косяк, чтобы сделать его критическим изменением. Косяк был исправлен ​​в более новой Mono VM. <lsl>jumpy(){

   jump next;//first jump
   @next;
   jump next;//второй прыжок - глюк (косяк), оператор никогда не запускается на выполнение
   return;

}</lsl>