Difference between revisions of "Jump/ru"

From Second Life Wiki
Jump to navigation Jump to search
m (Issues)
m (некоторые слова "ошибка" (word "bug") изменим на "косяк" и"глюк")
 
Line 73: Line 73:
{{#vardefine:lso|'''Детальные заметки'''
{{#vardefine:lso|'''Детальные заметки'''


<h5>Ошибка многократного скачка</h5>
<h5>Глюк многократного скачка</h5>
Следующая функция <code>jumpy</code> демонстрирует ошибку "несколько прыжков-источников к одной цели". Похоже, здесь функция должна привести к бесконечному циклу, что происходит при компиляции сценария для Mono VM. Однако при компиляции для LSO VM из-за даной ошибки второй прыжок никогда не происходит и функция возвращается. LL сообщили, что не желают исправить эту ошибку, чтобы сделать её критическим изменением. Эта ошибка была исправлена ​​в более новой Mono VM.
Следующая функция <code>jumpy</code> демонстрирует косяк "несколько прыжков-источников к одной цели". Похоже, здесь функция должна привести к бесконечному циклу, что происходит при компиляции сценария для Mono VM. Однако при компиляции для LSO VM из-за даного глюка второй прыжок никогда не происходит и функция возвращается. LL сообщили, что не желают исправить косяк, чтобы сделать его критическим изменением. Косяк был исправлен ​​в более новой Mono VM.
<lsl>jumpy(){
<lsl>jumpy(){
     jump next;//first jump
     jump next;//first jump
     @next;
     @next;
     jump next;//второй прыжок - ошибка, никогда не запускается на выполнение
     jump next;//второй прыжок - глюк (косяк), оператор никогда не запускается на выполнение
     return;
     return;
}</lsl>
}</lsl>
Line 86: Line 86:
*'''Только в [[LSO]]-режиме скрипта:'''  Если несколько источников скачка высказались за ту же метку цели в пределах видимости, то только первая (сверху вниз, слева направо) будет функционировать как и ожидалось, все остальные по-умолчанию откажут.
*'''Только в [[LSO]]-режиме скрипта:'''  Если несколько источников скачка высказались за ту же метку цели в пределах видимости, то только первая (сверху вниз, слева направо) будет функционировать как и ожидалось, все остальные по-умолчанию откажут.
*Метки находятся в области видимости при событийном и функциональном уровне, что значит невозможность объявить одинаковые метки в том же событии или функции, даже если метки заключены в другие условные-операторы, циклы и подобное. -- {{JIRA|SVC-6712}}
*Метки находятся в области видимости при событийном и функциональном уровне, что значит невозможность объявить одинаковые метки в том же событии или функции, даже если метки заключены в другие условные-операторы, циклы и подобное. -- {{JIRA|SVC-6712}}
**Попытка такого использования  приведет к бесполезной CIL-сигнла_сборки (assembly) об ошибке подключения. -- {{Jira|SCR-256}}
**Попытка такого использования  приведет к бесполезной CIL-сигнла_сборки (assembly) об косяке подключения. -- {{Jira|SCR-256}}
*Если код существует после возвращения, не инкапсулированные в структуре управления потоком, компилятор выдаст ошибку о коде быть мертвым, даже если код доступным с прыжка.
*Если код существует после возвращения, не инкапсулированного в структуру управления потоком, компилятор выдаст сообщение ошибки о падении кода, даже если код доступен с прыжка. -- {{Jira|SVC-1929}}
If code exists after a return that is not encapsulated in a flow control structure, the compiler will return an error about the code being dead even if the code is accessible with a jump. -- {{Jira|SVC-1929}}
}}{{Issues/SVC-6712}}{{Issues/SCR-256}}{{Issues/SVC-1929}}
}}{{Issues/SVC-6712}}{{Issues/SCR-256}}{{Issues/SVC-1929}}
{{#vardefine:helpers|
{{#vardefine:helpers|

Latest revision as of 02:34, 10 November 2013








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>