Ich möchte nur clearify warum Sie erhalten AnyVal anstelle von Int. Ich möchte nicht beleidigend sein, aber es scheint, als wärst du auch neu im Programmieren ...?
Unter der Annahme, dass Ihr Code tun würde, was Sie wollen, ist Ihre zweite If nicht wirklich sinnvoll. Man würde schreiben:
val blockNumber = {
if(x.getName equals ("NATIVE")) 0
else if(x.getName equals ("DATIVE")) 1
}
Das ist immer noch AnyVal. Weil in dem Fall, wenn entweder "NATIVE" oder "DATIVE" nicht übereinstimmen, der Compiler nicht weiß, welchen Wert Sie liefern werden und daher ist es Unit. Der gemeinsame Supertyp von Unit und Int ist AnyVal.
So Ihr Code mit fehlenden Pfaden:
val blockNumber = {
if(x.getName equals ("NATIVE")) 0
else {
if(x.getName equals ("DATIVE")) 1
else Unit
}
}
So haben Sie grundsätzlich 2 If-Statements in ineinander verschachtelt. Der erste fragt, ob der Wert von x.getName "NATIVE" ist und der andere ist ein allgemeiner else-Pfad, der normalerweise für die Behandlung des Standardfalls oder aller anderen Fälle verwendet wird. Aber du bringst einen anderen hinein, ohne einen anderen Weg, der sich in Einheit auflösen würde. Wie bereits erwähnt, ist der gemeinsame Supertyp von Int und Unit AnyVal.
Unter der Annahme, nur 2 Fälle „NATIVE“ und „Dativ“ haben könnten Sie schreiben:
val blockNumber = if(x.getNmae equal ("NATIVE")) 0
else 1
Ansonsten ist das Spiel-Fall-Ansatz von @Dogbert ist der Weg zu gehen. Wenn die Möglichkeit besteht, dass keiner der Fälle auftritt, sollten Sie Option wie @Dogbert verwenden. Andernfalls, wenn mindestens einer Ihrer Fälle übereinstimmt, können Sie Int ohne Option verwenden.
Mit freundlichen Grüßen, hoffe es hilft!
Welchen Wert möchten Sie, wenn 'x.getName' weder' "NATIVE" noch "DATIVE" 'ist? – Dogbert
Es sollte dann nichts. Ich meine, das val sollte leer sein. – Goldengirl
Was ist "leer" in Bezug auf 'blockNumber'? Was ist eine leere Nummer? –