Бесполезное использование «-» в выражении «-1» в контексте приемника (строка 13) - PullRequest
5 голосов
/ 14 марта 2019

Я пытаюсь сделать тесты для функции, которая выдает исключение с этим кодом:

use v6;
use Test;

plan *;

use lib "lib";
use Math::ConvergenceMethods;

sub f ($x) {return $x + 1;}


{
    is-approx: bisection(&f, -2, 0), -1;
    dies-ok: { bisection(&f, 3, 2) }, "Incorrect arguments";
}

done-testing;

И он возвращает это предупреждение, когда я запускаю его:

WARNINGS for /home/antonio/Code/perl6/Math-ConvergenceMethods/t/bisection.t:
Useless use of "-" in expression "-1" in sink context (line 13)
Useless use of constant string "Incorrect arguments" in sink context (lines 14, 14)

Как я могу это исправить?

Ответы [ 2 ]

7 голосов
/ 14 марта 2019

foo в выписке вида:

foo: ...

- это метка , где ... - это утверждение, которое она помечает.

Итак, написанное вами утверждение совпадает с:

bisection(&f, -2, 0), -1;

, который оставляет -1 в контексте приемника , отсюда и сообщение об ошибке.

(Сообщение несколько LTA , потому что ваша ошибка явно состоит в том, что вы думали, что синтаксис метки был синтаксисом вызова функции, а сообщение об ошибке действительно указывает на ошибку - in sink context - Useless use of "-" это дополнительная деталь, которая не помогает и, вероятно, добавляет к вашей путанице.)

См. Также В чем разница между этими двумя соглашениями о вызовах функций? .

0 голосов
/ 16 марта 2019

Просто хочу добавить для тех, кто может быть смущен тем, когда вы можете вызывать подпрограмму, используя двоеточие, за которым следуют аргументы - это альтернативный формат, доступный исключительно при вызове методов:

my @list = 1 , 2 , 3 ;
map( { $_ * 2 } , @list );  # "classic" fn call, works with or w/o brackets
@list.map: { $_ * 2 }       # OK  - calling the map method of @list, no brackets or
                            # comma (!) required.
map: { $_ * 2 } , @list ;   # fugetaboutit
...