| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Артём 06.02.2003 18:34 / 06.02.2003 18:38
все супер, только если $quant > ^source_table.count[] то происходит ошибка зацыкливанияendless loop detected while g:/www/html/class/catalog.p(948) exception.type=parser.runtimeя сделал так
@revolver[source_table;quant][added;rand_code;count]
# $count засовываю в переменную, чтобы не доставать
# в процессе выполнения $rand_code каждый раз ее из $source_table
$count(^source_table.count[])
^if($quant){
^if($quant > $count){
$quant($count)
}
}{
$quant(1)
}
$result[^source_table.select(0)]
## хеш, куда пишем то, что уже добавили в результат.
## нужно, чтобы не было дублирования
$added[^hash::create[]]
## код, который вычисляет нам в цикле случайную строку
$rand_code{^eval(^math:random($count)+1)}
^while($quant > ^result.count[]){
$rand($rand_code)
^while($added.[$rand]){$rand($rand_code)}
^result.join[^source_table.select(^source_table.line[] == $rand))]
^source_table.offset[set](0)
^added.add[$.$rand(1)]
}
#end @revolver[]а по первому варианту, насчет того что хэш не гарантирует порядка: