& ldquo; недопустимое значение & rdquo; при вызове gluNewQuadric

Я бы переписал этот код следующим образом:

@PostMapping("/cards")
public Mono<ResponseEntity<?>> addCard(@RequestBody Card card) {

    return repo.findOneByWord(card.getWord())                     // (1)

               .map(c ->                                          // (2)
                   ResponseEntity.unprocessableEntity()           // (2.1)
                                 .body("Card already exists.")    //
               )                                                  // 

               .switchIfEmpty(                                    // (3)
                   repo.save(card)                                // (3.1)
                       .map(c -> ResponseEntity.ok(c)             // (3.2)
               );                                                 //
}
  1. Выполнение запроса базы данных, который может возвращать Mono со значением или пустой ответ.
  2. Только в случае возвращаемого значения будет выполнен следующий .map, поэтому мы сопоставим карту с ответом 422
  3. . В противном случае в случае, если в БД нет такой тележки, функция .map будет пропущен, поэтому издатель, прошедший через .switchIfEmpty, будет подписан. Обратите внимание на , нет необходимости обертывать создание резервной копии Mono (пункты 3.1) в Mono.defer, так как сохранение фактического элемента произойдет только в случае подписки на данный поток. Следовательно, поскольку это выполнение происходит только тогда, когда обрабатывается swithIfEmpty, мы можем уменьшить ненужную упаковку. Наконец, в точке (3.2) результат будет сопоставлен с ответом 200 с сохраненным объектом Card.
1
задан Rabbid76 19 January 2019 в 07:58
поделиться

2 ответа

См. Спецификацию gluDisk :

 void gluDisk(    GLUquadric* quad,
     GLdouble inner,
     GLdouble outer,
     GLint slices,
     GLint loops);

Параметры
[...]
slices Определяет количество подразделений вокруг оси Z.

Это означает, что slices должно быть не менее 3, потому что для создания фигуры необходимо минимум 3 точки вокруг диска.

например.

gluDisk(quadrica, 0.0, 5.0, 3, 1); сгенерируют треугольник, а
gluDisk(quadrica, 0.0, 5.0, 5, 1); сгенерируют пятиугольник.

0
ответ дан Rabbid76 19 January 2019 в 07:58
поделиться

Если вы запустите это в отладчике и установите точку останова на erro, вы найдете что-то вроде этого (вывод из GDB):

Breakpoint 1, erro (coderro=100901) at test.c:12
12          estring=gluErrorString(coderro);
(gdb) bt
#0  erro (coderro=100901) at test.c:12
#1  0xf7dd7782 in gluQuadricError (qobj=0x81ddb70, which=100901) at src/libutil/quad.c:81
#2  0xf7dd85ad in gluPartialDisk (qobj=0x81ddb70, innerRadius=0, outerRadius=5, slices=1, loops=1, startAngle=0, sweepAngle=360) at src/libutil/quad.c:450
#3  0xf7dd84c8 in gluDisk (qobj=0x81ddb70, innerRadius=0, outerRadius=5, slices=1, loops=1) at src/libutil/quad.c:427
#4  0x08048af2 in tela () at test.c:36
#5  0xf7f72da8 in fghRedrawWindow () from /usr/lib/libglut.so.3
#6  0xf7f72df3 in fghcbDisplayWindow () from /usr/lib/libglut.so.3
#7  0xf7f77a90 in fgEnumWindows () from /usr/lib/libglut.so.3
#8  0xf7f72e47 in fghDisplayAll () from /usr/lib/libglut.so.3
#9  0xf7f73f39 in glutMainLoopEvent () from /usr/lib/libglut.so.3
#10 0xf7f73f97 in glutMainLoop () from /usr/lib/libglut.so.3
#11 0x08048b52 in main (argc=1, argv=0xffffd4e4) at test.c:48

Итак, ошибка исходит от gluDisk , Теперь простая попытка поиграть с его параметрами позволяет мне догадаться, что виновником является slices=1, что действительно не имеет смысла. Установка его, например, 2 избегает попадания в обратный вызов ошибки.

0
ответ дан Ruslan 19 January 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: