ho recentemente venuto sul seguente codice:Cosa fa l'operatore -><-?
IntPredicate neg = x -> x <- x;
Che cosa è questo, una sorta di inversione a doppio lambda?
ho recentemente venuto sul seguente codice:Cosa fa l'operatore -><-?
IntPredicate neg = x -> x <- x;
Che cosa è questo, una sorta di inversione a doppio lambda?
Non c'è l'operatore -> <-
. Il primo ->
è solo la sintassi lambda, come introdotto in Java 8, e quel secondo <-
è una concatenazione ingannevole di 'minore di' <
e 'unario meno' -
.
È possibile leggere come IntPredicate neg = (x) -> (x < (-x));
, cioè esso verifica se x
è inferiore -x
, che è il caso per tutti (beh, most) numeri negativi, da cui il nome neg
.
IntPredicate neg = x -> x <- x;
System.out.println(neg.test(4)); // false
System.out.println(neg.test(0)); // false
System.out.println(neg.test(-4)); // true
Solo per completezza: Questo test non è solo (intenzionalmente?) Difficile da capire, ma - come sottolineato nei commenti - viene a mancare anche per Integer.MIN_VALUE
(che è ==-Integer.MIN_VALUE
). Invece, probabilmente dovresti semplicemente usare il più semplice IntPredicate neg = x -> (x < 0);
.
"che è il caso di tutti i numeri negativi" ... eccetto 'Integer.MIN_VALUE';) – fredoverflow
Davvero, ti chiedi cosa c'è di sbagliato con un semplice' x <0' –
@MarkRotteveel la tua versione non sembra Arte ASCII, è appena leggibile. – Gimby
La mia ipotesi: Lambda '(x) -> (x <-x)' –
Sono tentato di votare per chiudere per "semplice errore tipografico". ;) –
Questo è un esempio di parentesi a volte utile. – MicSim