Geçenlerde aşağıdaki kodla üzerine geldi?-><- operatör ne yapar? Bu ne</p> <pre><code>IntPredicate neg = x -> x <- x; </code></pre> <p>, ters çift lambda çeşit:
cevap
-> <-
işleci yok. İlk ->
, Java 8'de tanıtıldığı gibi sadece lambda sözdizimi ve ikinci <-
, '<
'dan küçük ve' unary eksi '-
'un yanıltıcı bir birleşimidir.
Bunu x
tüm (iyi, most) negatif sayılar için durum, dolayısıyla adı neg
olan -x
daha küçük olup olmadığını test eder, yani IntPredicate neg = (x) -> (x < (-x));
olarak okuyabilir. Sadece şeyiyle
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
: Bu test değil sadece (kasten?) Anlamak zor ama - Açıklamalarda belirttiği gibi - aynı zamanda (
==-Integer.MIN_VALUE
olan)
Integer.MIN_VALUE
için başarısız olur. Bunun yerine, muhtemelen çok daha basit olan
IntPredicate neg = x -> (x < 0);
'u kullanmalısınız.
"tüm negatif sayılar için geçerli olan" ... ... "Integer.MIN_VALUE"; – fredoverflow
hariç. Gerçekten, basit bir x-0 ' –
@MarkRotteveel ile neyin yanlış olduğunu merak edersiniz. ASCII sanatı, sadece okunabilir. – Gimby
Tahminimce: Lambda '(x) -> (x <-x)' –
"Basit yazım hatası" nı kapatmak için oy kullanmaya başlıyorum. ;) –
Bu, parantezlerin bazen iyi olduğu bir örnektir. – MicSim