Usando el siguiente código:
use v6d;
# sub circumfix:<α ω>( @a ) {
# @a[0] >= @a[1] & @a[0] <= @a[2];
# };
sub circumfix:<α ω>( $a, $b, $c ) {
$a >= $b & $a <= $c;
};
if (α <5 0 10> ω) {
say 'Truthy';
}
else {
say 'Falsey';
}
Resultados en:
(base) hsmyers@BigIron:~/board$ perl6 ./op.p6
Too few positionals passed; expected 3 arguments but got 1
in sub circumfix:<α ω> at ./op.p6 line 7
in block <unit> at ./op.p6 line 11
Mientras que cambiar el bloque comentado por la otra definición resulta en:
(base) hsmyers@BigIron:~/board$ perl6 ./op.p6
Truthy
La versión rota (con tres parámetros) es la que quiero, ¿alguien podría explicar por qué está rota?
operator-overloading
raku
hsmyers
fuente
fuente
(*@foo where .elems == 3)
que luego podría apoyar ya seaα $a, $b, $c ω
oα ($a, $b, $c) ω
where
cláusula para que obtenga, por ejemplo, un mensaje de error predeterminado más agradable y una velocidad de envío Encuentrowhere
mejores cláusulas para condiciones arbitrarias que un subsigno no puede manejar o para definir un mensaje de error totalmente personalizado (por ejemplo( *@ where { .elems == 3 or die "nope" } )
). Tenga en cuenta que puede combinar estos:( *@ where { .elems == 3 or die "nope" } ($a, $b, $c) )
le da desestructuración en variables con nombre cuando obtiene los argumentos correctos y un mensaje de error personalizado cuando no lo hace.multi
, mucho mejor que mi sugerencia de abusar de unawhere
cláusula para un caso de uso de error que se puede distinguir por múltiples firmas sinwhere
cláusulas. (En retrospectiva, me da vergüenza mi revelación de mis instintos más agresivos cuando serían tan innecesarios e inapropiados.) De todos modos, tenga otro voto positivo y gracias por mejorar nuestra respuesta con sus comentarios. :)Estos no son tres argumentos. Es una lista de tres valores (de tipo
IntStr
) y, por lo tanto, un solo argumento.fuente